python - "<Message: title>"需要具有字段 "id"的值才能使用此多对多关系。

标签 python django django-rest-framework

我有一个消息模型,其中有 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/

相关文章:

django-rest-framework - Allauth 不会返回所需的 token 负载

Python - 连接一个字符串以包含一个反斜杠

django - 在 Django 中使用 TemplateView 和 ListView 有什么区别?

python - 基于 SSL 的 Python 中的 REST API

python - Django ORM - 没有级联删除多对多关系

django - 在Pycharm社区版中无法加载facet Django,但在专业版中没有错误

python - 将自定义响应 header 添加到 APIException

Python:如何使用 xml.dom.minidom 获取 XML 元素的文本内容?

python - Django Web App 通过 Heroku Connect 与 Salesforce 集成

python - 如何在 Python 中读取主目录