2015-03-11 1 views

ответ

1

Вам необходимо определить symmetrical=False при создании поля. В Django 1.7 если вы пытаетесь ваше определение, вы получите ошибку похожее на это:

CommandError: System check identified some issues: 

ERRORS: 
myapp.MyModel.a: (fields.E332) Many-to-many fields with intermediate tables must not be symmetrical. 

так изменить поле для

a = models.ManyToManyField('self', through = 'x', symmetrical = False) 

Теперь все зависит от вашего x класса. Он должен определить два ForeignKey поля обратно yourModel:

class x(models.Model): 
    from_a = models.ForeignKey(myClass, related_name = 'from_a') 
    to_a = models.ForeignKey(myClass, related_name = 'to_a') 
    comment = models.CharField(max_length = 255) 

Теперь вы не фильтровать от x но из отмененных отношений, созданные с помощью FK, то есть что-то вроде этого:

myClass.objects.filter(from_a__comment='something') 

или точки зрения экземпляра:

my_instance.a.filter(from_a__comments='something') 

Большая статья об этой теме можно найти здесь: Self-referencing many-to-many through

Смежные вопросы