python - 多对多字段上的 Django 唯一
问题描述
我正在尝试在用户之间创建一个私人消息系统。我创建了两个模型。一个是包含消息的“消息”,另一个是包含两个用户之间的消息的“对话”。我想阻止创建重复的对话。例如,我在 user1 和 user2 之间创建了一个对话,这个对话的 ID 是“5”,然后我在 user1 和 user2 之间再次创建了另一个对话,它的 ID 是“6”。这对我很不利。同一用户之间必须只有一次对话。
当我尝试“ unique=True ”时,我收到一个错误,因为“ api.Conversation.participants: (fields.E330) ManyToManyFields cannot be unique。 ”
模型.py
class Conversation(models.Model):
participants = models.ManyToManyField(User, unique=True)
class Message(models.Model):
sender = models.ForeignKey(User, related_name="sender", on_delete=models.CASCADE, related_query_name='s')
reciepent = models.ManyToManyField(User)
conversation = models.ForeignKey(Conversation, blank=False, null=False, on_delete=models.CASCADE)
msg_content = models.TextField(max_length=500, blank=True)
sendtime = models.DateTimeField(auto_now_add=True)
ordering = ["-sendtime"]
解决方案
推荐阅读
- java - MariaDB 返回类型为 INT 而不是 BIGINT 的虚拟列
- node.js - 如何在 Express App 中将路由器与控制器分离?
- mysql - 如果表中不存在,则Mysql触发器插入行但不起作用
- php - drupal 7 的数据库模式迁移策略
- amazon-ec2 - 如果实例中的任何进程关闭,则生成一个新的 EC2 实例
- shell - 限制 Openstack 实例 ssh 访问
- css - 媒体查询中窗口屏幕的实际大小
- node.js - 使用 JSON.stringify 字符串化的符号
- python - 更改 pandas 数据框中的行顺序而不会丢失或弄乱数据
- windows-10 - 自定义凭据提供程序:未显示在登录屏幕上的登录用户