Python Django在ManyToManyField独一无二
我正在尝试在用户之间创建一个私有消息传递系统。我创建了两个模型。一个是包含消息的“消息”,另一个是包含两个用户之间消息的“对话”。我想避免重复对话。例如,我在user1和user2之间创建了一个对话,这个对话的ID是“5”,然后我又在user1和user2之间创建了另一个对话,它的ID是“6”。那对我不好。同一用户之间必须只有一次对话 当我尝试“unique=True”时,我得到的错误是“api.Conversation.participants:(fields.E330)许多字段不能是唯一的。” 型号.pyPython Django在ManyToManyField独一无二,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在尝试在用户之间创建一个私有消息传递系统。我创建了两个模型。一个是包含消息的“消息”,另一个是包含两个用户之间消息的“对话”。我想避免重复对话。例如,我在user1和user2之间创建了一个对话,这个对话的ID是“5”,然后我又在user1和user2之间创建了另一个对话,它的ID是“6”。那对我不好。同一用户之间必须只有一次对话 当我尝试“unique=True”时,我得到的错误是“api.Conversation.participants:(fields.E330)许多字段不能是唯一的。
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"]
但是,您的
对话
不能像ManyToManyField
建议的那样有多个用户
s吗?如果是这样,那么唯一约束就没有多大意义。如果一个对话只能有两个用户,那么您的建模是不正确的,ManyToManyField
应该从User
到自身(self
)是的,一个对话只能有两个用户,如User1和User2、User3和User5。。。但这必须是独一无二的。如果用户1和用户2之间存在对话,则无法在用户1和用户2之间再次创建对话。我不想在对话中复制用户对。