【发布时间】:2023-03-09 15:32:01
【问题描述】:
我不明白如何使用 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 都有包含多个任意对象的“事物”。我有问题的是Y,X只是为了比较。
我有几个对象要测试。
a1, a2, b1 = A(), A(), B()
a1.save()
a2.save()
b1.save()
等等。有了 X 课,我可以做到
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 进行反向查找以查看它的使用位置?
【问题讨论】:
-
this 没有帮助吗?