是否可以将模型的默认排序顺序设置为相关模型(而不是整数键)中的字段,即产生带有两个模型字段的SQL order by子句的东西?如果是这样,怎么样?我可以通过query_by来做到这一点,但我无法弄清楚如何默认设置它。感谢。
class Foo(models.Model):
name = models.CharField(max_length=50)
class Bar(models.Model):
related = models.ForeignKey(Foo)
bar_date = models.DateField()
class Meta:
ordering = ('bar_date', 'related.name', )
答案 0 :(得分:26)
我使用django 1.2.7而不是连接ForeignKey.Attribute我们应该使用“__”,所以这段代码将起作用:
class Meta:
ordering = ('bar_date', 'related__name', )
答案 1 :(得分:4)
答案 2 :(得分:2)
作为order_with_respect_to(仅支持一个字段)的替代方法,您可以使用自定义管理器来提供排序。这也允许您在Foo中的多个字段上订购并且仍然具有正常的Bar.objects管理器。您必须先测试是否首先应用Meta.ordering或自定义管理器排序。
class FooSortedManager(models.Manager):
def get_query_set(self):
return super(FooSortedManager, self).get_query_set().order_by('foo__name')
class Foo(models.Model):
name = models.CharField(max_length=50)
class Bar(models.Model):
related = models.ForeignKey(Foo)
bar_date = models.DateField()
foo_sorted = FooSortedManager()
class Meta:
ordering = ('bar_date',)
答案 3 :(得分:0)
@stuart:对于“order_with_respect_to”,我对自动添加的物理模型字段进入子表...我不完全理解事情是如何...恕我直言的文档对于语法排序非常糟糕,怎么样!
没有评论:-) http://code.djangoproject.com/ticket/8975
无论如何,我喜欢Django,但......: - ))
答案 4 :(得分:0)
在现代版的django中它是:
class Meta:
ordering = ['word']
答案 5 :(得分:-1)
class Question(models.Model):
question_text=models.CharField(max_length=200)
class Meta:
verbose_name_plural=" Question"
class Choice(models.Model):
question=models.ForeignKey(Question,on_delete=models.CASCADE)
class Meta:
verbose_name_plural=" Choice"
您可以如上所述更改班级名称前的空格数,或使用以下数字订购:
class Question(models.Model):
question_text=models.CharField(max_length=200)
class Meta:
verbose_name_plural="1.Question"
class Choice(models.Model):
question=models.ForeignKey(Question,on_delete=models.CASCADE)
class Meta:
verbose_name_plural="2.Choice"