我有一个消息模型,其中有 create_user
ForeignKey 和 receive_user
ManyToManyField:
class Message(models.Model):
"""
消息
"""
message_num = models.CharField(default=getMessageNum, max_length=16, help_text="消息") # 注意:message_num 相同,说明是同一次发送
title = models.CharField(max_length=64, help_text="消息名称")
content = models.CharField(max_length=1024, help_text="消息内容")
create_user = models.ForeignKey(User, related_name="created_messages",help_text="创建者")
receive_user = models.ManyToManyField(User, related_name="received_messages", help_text="接受者")
def __str__(self):
return self.title
def __unicode__(self):
return self.title
当我使用波纹管保存消息时,我排除了一个异常:
try:
receive_user = User.objects.get(id=user_id)
message = Message.objects.create(
title=title,
content=content,
create_user=create_user,
receive_user=receive_user,
)
message.save()
except Exception as e:
raise e
我得到异常:
"<Message: title>" needs to have a value for field "id" before this many-to-many relationship can be used.
如何解决这个问题?有 friend 可以帮我解决这个问题吗?
最佳答案
Django 文档:https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/
之后检查代码
What follows are examples of operations that can be performed using the Python API facilities. Note that if you are using an intermediate model for a many-to-many relationship, some of the related manager’s methods are disabled, so some of these examples won’t work with such models.
我必须先保存父模型,然后才能添加 m2m 值。检查下面
receive_user = User.objects.get(id=user_id)
message = Message.objects.create(
title=title,
content=content,
create_user=create_user,
# receive_user=receive_user,
)
# message.save() - no needs in save() when you use create() method
message.receive_user.add(receive_user)
关于python - "<Message: title>"需要具有字段 "id"的值才能使用此多对多关系。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47706946/