我正在为Django的翻译工作。每个翻译人员可以在不同级别讲不同的语言。因此,翻译人员1可以在专业级别上讲英语,翻译人员2可以在级别上讲英语'本地语言。
有四种不同的Levels
。 (等级是模型)
class Level(models.Model):
LEVEL_CHOICES = (
('unknown', _('Unknown')),
('standard', _('Standard level')),
('professional', _('Professional level')),
('native', _('Native speaker level')),
)
name = models.CharField(max_length=40, choices=LEVEL_CHOICES, blank=False, null=False,
help_text=_('Choose a level'))
def __str__(self):
return '{}'.format(self.get_name_display())
模型LanguageLevel
:
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'),)
现在问题是什么。问题是,如果我想获得,例如,翻译人员在级别'标准'上发言,事实上,我希望翻译人员在级别上讲English
&# 39;标准','专业'或者' native'因为那些能说“本地人”的人可以说'标准'太。
我的项目中有很多这样的情况,所以我想简化一下。
所以English
< unknown
< standard
< professional
。现在,如果我尝试让所有翻译人员在native
级别上讲英语,我也想获得standard
和professional
。
答案 0 :(得分:2)
您可以使用整数字段而不是字段。这使得查询级别变得简单。
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'))
我不确定你为什么需要Level模型。我会把所有内容都放到LanguageLevel中。
您的查询将如下所示:
LanguageLevel.objects.filter(level__gte=1, language__name='English')