class Food_Tag(models.Model):
name = models.CharField(max_length=200)
related_tags = models.ManyToManyField('self', blank=True, symmetrical=False, through='Tag_Relation')
def __unicode__(self):
return self.name
class Tag_Relation(models.Model):
source = models.ForeignKey(Food_Tag, related_name='source_set')
target = models.ForeignKey(Food_Tag, related_name='target_set')
is_a = models.BooleanField(default=False); # True if source is a target
has_a = models.BooleanField(default=False); # True if source has a target
我想知道食物标签之间的关系,比如:
^{pr2}$但是相关的_标签是空的。我知道这和“对称=False”的论点有关,但是我怎么能建立这样的模型呢肉类相关标签.all()'返回所有相关的食物标签?在
由于您没有明确指出它们需要不对称,所以我建议您首先设置正如eternicode所指出的,当您为M2M关系使用symmetrical=True
。正如您所描述的那样,这将导致关系以两种方式工作。through
模型时,您不能这样做。如果您可以不使用through
模型,那么可以设置symmetrical=True
来获得您描述的行为。在但是,如果它们需要保持不对称,可以将关键字参数
related_name="sources"
添加到related_tags
字段中(您可能需要考虑将其重命名为targets
以使事情更清楚),然后使用meat.sources.all()
访问相关标记。在我发现Charles Leifer提出的这个方法似乎是克服Django限制的一个好方法。在
如the docs所述:
因此,现在还没有在Django中,可以与额外的字段有一个对称的递归多对多关系。这是一个“二选一”的交易。在
相关问题 更多 >
编程相关推荐