如何使用一对多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中的列表类型
来处理答案 0 :(得分:4)
使用元信息定义排序:
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
这将在时间字段中保存创建日期时间,因此将根据添加时间对结果进行排序。
btw(如果有其他原因)你的模型似乎会有很多Persons
和很多Subjects
所以我建议使用many to many fields。这会将多个用户映射到多个主题并对称地返回。根据{{1}} - Person
映射,您甚至可以使用through
选项存储更多详细信息(用于排序的时间等,甚至是在需要时存储记录的标记/百分比)。
答案 1 :(得分:2)
class Meta:
ordering = ['id']
不需要其他字段。 Django模型总是有'id'字段。
答案 2 :(得分:1)
您需要使用元类来对其进行排序并使用日期时间字段并将auto_now选项设置为True。 我建议使用代理类进行排序。分拣是一项昂贵的操作 有关排序和this link代理模型的详细信息,请参阅this link。
答案 3 :(得分:0)
我一直在寻找完全一样的东西,并且from sklearn.svm import SVR
from sklearn import cross_validation as CV
reg = SVR(C=1., epsilon=0.1, kernel='rbf')
scores = CV.cross_val_score(reg, X, y, cv=10, scoring='neg_mean_squared_error')
可以工作:
order_with_respecto_to
您可以看到插入的原始订单,也可以根据需要进行修改。您也可以按顺序获取下一个寄存器
class Game(models.Model):
title = models.CharField(max_length=255)
class Task(models.Model):
title = models.CharField(max_length=255)
game = models.ForeignKey(Game, on_delete=models.CASCADE)
class Meta:
order_with_respect_to = 'game'
这里是文档 https://docs.djangoproject.com/en/3.0/ref/models/options/#order-with-respect-to