首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在使用这种多对多关系之前,“<Message:title>”需要有一个字段“id”的值。

在使用这种多对多关系之前,“<Message:title>”需要有一个字段“id”的值。
EN

Stack Overflow用户
提问于 2017-12-08 10:46:40
回答 2查看 14.1K关注 0票数 11

我有一个消息模型,在其中我有create_userForeignKey和receive_userManyToManyField:

代码语言:javascript
复制
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

当我使用bellow保存消息时,我除了一个异常:

代码语言:javascript
复制
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

我得到了一个例外:

代码语言:js
复制
"" needs to have a value for field "id" before this many-to-many relationship can be used.

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-08 10:50:52

Django文档:https://docs.djangoproject.com/en/1.11/topics/db/examples/many\_to\_many/

检查代码后

下面是可以使用Python API工具执行的操作的示例。请注意,如果您正在为多对多关系使用中间模型,则相关管理器的一些方法将被禁用,因此这些示例中的一些将不适用于此类模型。

My必须先保存父模型,然后才能添加m2m值。检查下面

代码语言:javascript
复制
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)
票数 14
EN

Stack Overflow用户

发布于 2021-02-25 18:04:02

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

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

from modelcluster.fields import ParentalManyToManyField

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

也许这能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47706946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档