Я не понимаю, как следовать отношениям «многие ко многим» в обратном направлении с django-gm2m.Вот пример для models.py:
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey
from gm2m import GM2MField
class A(models.Model):
pass
class B(models.Model):
pass
class X(models.Model):
things = GM2MField()
class Y(models.Model):
things = GM2MField(through='Yrel')
class Yrel(models.Model):
y = models.ForeignKey(Y)
thing = GenericForeignKey(ct_field='thing_ct', fk_field='thing_fk')
thing_ct = models.ForeignKey(ContentType)
thing_fk = models.CharField(max_length=255)
timestamp = models.DateTimeField(auto_now_add=True)
X и Y оба имеют «вещи», которые содержат несколько произвольных объектов.У меня проблемы с, а X только для сравнения.
У меня есть несколько объектов для тестирования.
a1, a2, b1 = A(), A(), B()
a1.save()
a2.save()
b1.save()
и т. Д.С классом XI можно сделать
x1, x2 = X(), X()
x1.save()
x2.save()
x1.things.add(a1, b1)
x2.things.add(a1)
, а затем вернуть добавленные вещи с помощью x1.things.all()
и т. Д. Чтобы перейти в обратном направлении, я использую x_set
, как в a1.x_set.count()
.
Все идет нормально.С "Y", который использует "через", я делаю
y1 = Y()
y1.save()
Yrel(y=y1, thing=a1).save()
Yrel(y=y1, thing=a2).save()
, чтобы добавить две "вещи", и затем я могу снова получить список с y1.things.all()
.Но как я могу сделать обратный поиск из a1
, чтобы увидеть, где он используется?