Python 如何在同一类的Django对象上设置层次结构?

Python 如何在同一类的Django对象上设置层次结构?,python,django,Python,Django,我正在为Django的翻译工作。每个翻译人员可以在不同的层次上说不同的语言。因此,译者1可以说“专业”级别的英语,译者2可以说“母语”级别的英语 有四种不同的级别。(级别为模型) 和型号语言级别: class LanguageLevel(models.Model): language = models.ForeignKey(Language, help_text=_('Choose a language'), relate

我正在为Django的翻译工作。每个翻译人员可以在不同的层次上说不同的语言。因此,译者1可以说“专业”级别的英语,译者2可以说“母语”级别的英语

有四种不同的
级别
。(级别为模型)

和型号
语言级别

class LanguageLevel(models.Model):
    language = models.ForeignKey(Language,
                                 help_text=_('Choose a language'), related_name='language_levels')
    level = models.ForeignKey(Level,
                              help_text=_('Choose a level of the language'))
    price_multiplier = models.FloatField(default=0.0,
                                         help_text=_('Type a price multiplier'))

    def __str__(self):
        return '{}: {}'.format(self.language, self.level)

    class Meta:
        unique_together = (('level', 'language'),)
现在有什么问题了。问题是,例如,如果我想让说
英语的译者达到“标准”水平,事实上,我想让说
英语的译者达到“标准”、“专业”或“母语”水平,因为那些会说“母语”的人也会说“标准”

在我的项目中有很多类似的情况,所以我想简化一下


因此,
unknown
您可以使用integerfield而不是charfield。这使得在级别上的查询变得简单

LEVEL_CHOICES = (
    (0, _('Unknown')),
    (1, _('Standard level')),
    (2, _('Professional level')),
    (3, _('Native speaker level')),
)

level = models.IntegerField(choices=LEVEL_CHOICES, default=0,
                        help_text=_('Choose a level'))
我不知道你为什么需要级别模型。我会把一切都放在语言层面上

您的查询如下所示:

LanguageLevel.objects.filter(level__gte=1, language__name='English')

可以使用integerfield而不是charfield。这使得在级别上的查询变得简单

LEVEL_CHOICES = (
    (0, _('Unknown')),
    (1, _('Standard level')),
    (2, _('Professional level')),
    (3, _('Native speaker level')),
)

level = models.IntegerField(choices=LEVEL_CHOICES, default=0,
                        help_text=_('Choose a level'))
我不知道你为什么需要级别模型。我会把一切都放在语言层面上

您的查询如下所示:

LanguageLevel.objects.filter(level__gte=1, language__name='English')