【问题标题】:Django: I am getting "ValueError: needs to have a value for field "id" before this many-to-many relationship can be used."Django:我收到“ValueError:在使用这种多对多关系之前需要字段“id”的值。”
【发布时间】:2022-07-20 06:17:04
【问题描述】:

我正在尝试编写一个函数record_post,它使用以下模型保存Post

class Post(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    body = models.CharField(max_length=1000)
    date_created = models.DateTimeField()
    platforms = models.ManyToManyField(Platform)

这里是record_post 函数:

def record_post(user, body=None, platforms=None):
    post = Post(
        user=user,
        body=body,
        date_created=timezone.now(),
    )

    # Add platforms
    facebook = Platform.objects.get(name="Facebook")

    if "facebook" in platforms:
        post.platforms.add(facebook)

    post.save()

    return post

但是,当我运行该函数时,出现以下错误:ValueError: "<Post: 53>" needs to have a value for field "id" before this many-to-many relationship can be used.

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    我设法通过将post.save() 移动到Post 的初始化位置来解决此问题。所以现在完整的功能是:

    def record_post(user, body=None, platforms=None):
            post = Post(
                user=user,
                body=body,
                date_created=timezone.now(),
            )
    
            post.save() # MOVED LINE
    
            # Add platforms
            facebook = Platform.objects.get(name="Facebook")
    
            if "facebook" in platforms:
                post.platforms.add(facebook)
    
            return post
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-10
      • 2020-08-08
      相关资源
      最近更新 更多