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
Je veux être en mesure d'obtenir les relations entre Food_Tags comme:Comment créer des relations récursives ManyToManyField avec des champs supplémentaires symétriques dans Django?
>>> steak = Food_Tag.objects.create(name="steak")
>>> meat = Food_Tag.objects.create(name="meat")
>>> r = Tag_Relation(source=steak, target=meat, is_a=True)
>>> r.save()
>>> steak.related_tags.all()
[<Food_Tag: meat>]
>>> meat.related_tags.all()
[]
mais related_tags est vide pour la viande. Je me rends compte que cela a à voir avec l'argument 'symmetrical = False', mais comment puis-je configurer le modèle de telle sorte que 'meat.related_tags.all()' renvoie tous les Food_Tags associés?
En fait, Django implémente la symétrie de cette façon. Il crée un autre enregistrement dans la base de données. – Bobort