django - Django不对称关系:返回相交
问题描述
我将 Django 2.1.3 与 Python 3.6.6 一起使用。我有两个模型,一个自定义 User 模型和一个 Connection 模型来跟踪用户之间的关系,定义如下:
from django.db import models
from django.contrib.auth.models import
class User(AbstractUser):
# (additional fields)
connections_sent = models.ManyToManyField(
'self',
through='Connection',
# through_fields=('from_user', 'to_user'),
related_name='connections_received',
symmetrical=False,
)
def __str__(self):
return self.email
def add_connection(self, user):
connection, created = Connection.objects.get_or_create(
from_user=self,
to_user=user,
)
return connection
def remove_connection(self, user):
Connection.objects.filter(
from_user=self,
to_user=user,
).delete()
return
class Connection(models.Model):
from_user = models.ForeignKey(User, related_name='from_users', on_delete=models.CASCADE)
to_user = models.ForeignKey(User, related_name='to_users', on_delete=models.CASCADE)
class Meta:
unique_together = ('from_user', 'to_user')
def __str__(self):
return "Connection from {} to {}".format(self.from_user, self.to_user)
这个想法是(类似于LinkedIn),用户可以向其他用户发送连接请求(connections_sent),接收用户必须在进一步交互之前确认。
我想定义一个User.get_confirmed_connections(self)
过滤函数,connections_sent
以便只返回确认的连接。即它应该返回 和 之间的connections_sent
交集connections_received
。这可以用过滤器完成吗?
解决方案
为此,您需要放置某种标志来标识关系是否已验证。您可以在Connection
模型中添加它。试试这样:
class Connection(models.Model):
from_user = models.ForeignKey(User, related_name='from_users', on_delete=models.CASCADE)
to_user = models.ForeignKey(User, related_name='to_users', on_delete=models.CASCADE)
is_verified = models.BooleanField(default=False)
并在 CustomUser 中添加以下方法:
def get_confirmed_connection(self):
return self.from_users.filter(from_users__is_verified=True)
推荐阅读
- vue.js - 仅将 Vue 添加到现有应用程序的某些部分
- python - 为什么在GBK编码的CMD中运行Python 2源代码会出现乱码?
- flutter - 如何在底部导航栏中刷新状态
- dependency-injection - 如何使用 Microsoft.Extensions.DependencyInjection 进行依赖项覆盖
- python - 找到第 k 个最大的整数
- google-chrome-extension - Why does the Chrome Extension not trigger Google Analytics / GoogleTagManager?
- ssh - Build Docker image to install/run openssh-server
- python - 如何从多个段落中找到常用的单词或句子或段落
- python-3.x - tee command change behavior with py3
- javascript - How to add new columns to an Excel file in my local system using Vanilla Javascript?