我想在组织之间建立一种友谊关系。我在Organisation
模型中添加了一个connected_organisations
字段:
class Organisation(models.Model):
...
connected_organisations = models.ManyToManyField('self',
related_name='organisations_connected',
through='Connection',
through_fields=('requester', 'requestee'),
symmetrical=False,
blank=True)
然后我创建了Connection
作为中介模型:
class Connection(models.Model):
requester = models.ForeignKey(Organisation, related_name='requester', null=True, on_delete=models.CASCADE)
requestee = models.ForeignKey(Organisation, related_name='requestee', null=True, on_delete=models.CASCADE)
is_connected = models.BooleanField(default=False)
is_connected
字段表示请求者是否批准了友谊请求,或者请求是否仍然挂起。你知道吗
我在org1
和org2
之间创建一个连接:
Connection.objects.create(requester=org1, requestee=org2)
我知道我能做到:
org1.connected_organisations.all()
这将返回org2
,但是我找不到如何通过is_connected
字段过滤它们。你知道吗
我试过这样的方法:
Organisation.objects.filter(connected_organisations__requestee=org2, connected_organisations__is_connected=True)
但我得到了:
django.core.exceptions.FieldError: Related Field got invalid lookup: is_connected
您可以直接使用through模型(在这种情况下我通常会这样做):
我认为您使用的
related_names
有点误导,因为它们应该表示一个反向关系,所以可能会将它们改成这样(不知道确切的用例)。例如,org.connections_requested.all()
将返回一个包含所有连接的查询集,其中org
是requester
。你知道吗您可以根据以下关系进行筛选:
您还可以直接对
Connection
类进行筛选:相关问题 更多 >
编程相关推荐