【问题标题】:django models.py ordering using foreign fielddjango models.py 使用外部字段排序
【发布时间】:2015-09-22 09:56:00
【问题描述】:

我正在使用 django1.7,我有两个模型。

我的一个模型我想通过一个外国模型上的字段来指定ordering。这两个模型通过外键链接。

这是我的两个示例模型:

class ObjectiveDetails(models.Model, FillableModelWithLanguageVersion):
    user = models.ForeignKey(User)
    language_version = models.ForeignKey('LanguageVersion')
    field = models.TextField(null=False, blank=False, max_length=5000)
    objective_timestamp_added = models.DateTimeField(auto_now_add=True, auto_now=False)
    objective_timestamp_updated = models.DateTimeField(auto_now=True, auto_now_add=False)

    class Meta:
        ordering = ['language_version.language_code', 'id']

class LanguageVersion(models.Model):
    """Language version selection for a user"""
    user = models.ForeignKey(User)
    language_code = models.CharField(max_length=32)
    language_code_disabled = models.BooleanField(default=False)
    language_version_timestamp_added = models.DateTimeField(auto_now_add=True, auto_now=False)
    language_version_timestamp_updated = models.DateTimeField(auto_now=True, auto_now_add=False)  # the date the language version is updated when the user changes their subscription type.

我正在尝试通过 LanguageVersion 模型上的 language_code 订购 ObjectiveDetails。

我已经尝试了几次,但我都做不好。我已阅读文档并搜索了 SO 和 Google,但找不到正确答案,

【问题讨论】:

  • 你试过order_by('language_version')吗?

标签: python django django-models django-1.7


【解决方案1】:

将 language_code 排序添加到 LanguageVersion 并从 ObjectiveDetails 中删除 .language_code

您添加的每个外键都会 也隐式包含其所有默认排序。

https://docs.djangoproject.com/en/1.7/ref/models/options/#ordering

你的模型会是这样的

class ObjectiveDetails(models.Model, FillableModelWithLanguageVersion):
    user = models.ForeignKey(User)
    language_version = models.ForeignKey('LanguageVersion')
    field = models.TextField(null=False, blank=False, max_length=5000)
    objective_timestamp_added = models.DateTimeField(auto_now_add=True, auto_now=False)
    objective_timestamp_updated = models.DateTimeField(auto_now=True, auto_now_add=False)

    class Meta:
        ordering = ['language_version', 'id']

class LanguageVersion(models.Model):
    """Language version selection for a user"""
    user = models.ForeignKey(User)
    language_code = models.CharField(max_length=32)
    language_code_disabled = models.BooleanField(default=False)
    language_version_timestamp_added = models.DateTimeField(auto_now_add=True, auto_now=False)
    language_version_timestamp_updated = models.DateTimeField(auto_now=True, auto_now_add=False)  # the date the language version is updated when the user changes their subscription type.

    class Meta:
        ordering = ['language_code']

【讨论】:

  • demonno,谢谢,效果很好 - 我有点尴尬,我错过了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-18
  • 1970-01-01
  • 2021-08-21
  • 2011-02-06
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
相关资源
最近更新 更多