Skip to main content
 首页 » 编程设计

python之django models.py 使用外部字段排序

2024年10月24日37lidabo

我使用的是 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,但找不到正确的答案,

请您参考如下方法:

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

Each foreign key you add will implicitly include all of its default orderings as well.

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']