加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在Django中维护一对多关系的插入顺序

发布时间:2020-12-20 11:16:23 所属栏目:Python 来源:网络整理
导读:如何使用一对多Django映射维护插入排序,例如: 说我们有, class Person(models.Model): name = Model.CharField(max_length=50)class Subject(models.Model): sub_name = Model.CharField(max_length=50) person = Model.ForeignKey('Person')def insert_dat
如何使用一对多Django映射维护插入排序,例如:
说我们有,

class Person(models.Model):
    name = Model.CharField(max_length=50)

class Subject(models.Model):
    sub_name = Model.CharField(max_length=50)
    person = Model.ForeignKey('Person')

def insert_data():
    person = Person.objects.create(name='Deepan')
    Subject(name='Eng',person=person).save()
    Subject(name='Sci',person=person).save()

Subject.objects.filter(person=person) # is there a way to make this to always return the subjects in the inserted order,i.e Eng,Sci instead of Sci,Eng

这是使用hibernate / grails中的列表类型处理的

解决方法

使用元信息定义排序:

class Subject(models.Model):
    sub_name = models.CharField(max_length=50)
    person = models.ForeignKey('Person')
    time = models.DateTimeField(auto_now_add = True)

    class Meta:
        ordering = ['time'] #or ['-time'] according to the ordering you require

这将在时间字段中保存创建日期时间,因此将根据添加时间对结果进行排序.

顺便说一句(如果有其他原因)你的模型似乎会有很多人和很多主题,所以我建议使用many to many fields.这会将多个用户映射到多个主题并对称地返回.您甚至可以使用through选项存储更多详细信息(排序的时间等,甚至是在需要时存储记录的标记/百分比)每个Person-Subject映射.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读