&#34; <message:title =“”>&#34;需要有一个字段的值&#34; id&#34;在此之前可以使用多对多关系。

时间:2017-12-08 02:46:40

标签: python django django-rest-framework

我有一个Message模型,其中有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.

如何解决此问题?有些朋友可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

Django文档:https://docs.djangoproject.com/en/1.11/topics/db/examples/many_to_many/

之后检查代码
  

以下是可以使用的操作示例   Python API工具。请注意,如果您使用的是中间体   模型为多对多关系,一些相关的经理   方法被禁用,因此其中一些示例不适用于此类   模型。

我必须首先保存父模型,然后才能添加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)

答案 1 :(得分:0)

另一种在创建模型时创建与另一个模型的关系的方法是通过 ParentalManyToManyField 与模型相关联。

这样就可以同时保存实例的 id 并与另一个模型相关联。

from modelcluster.fields import ParentalManyToManyField

receive_user = ParentalManyToManyField(User, related_name="received_messages", help_text="接受者")

也许这会有所帮助。