gpt4 book ai didi

python - 如何在 Django 中设置 ManyToMany 字段的值?

转载 作者:太空狗 更新时间:2023-10-29 21:17:31 25 4
gpt4 key购买 nike

在学习Django做web编程的过程中,遇到了这个问题。我在Google和Django的官方网站上搜索了biut找不到任何答案。请帮助我。

系统环境:

  1. 软呢帽 18
  2. python 2.7
  3. Django 1.5.1
  4. Eclipse + PyDev

运行时:Django 的开发服务器

我有一个模型包含 ManyToMany 字段。当我通过 django 的管理面板设置值时,一切顺利。下面的代码是我所有的模型:

class Posts(models.Model):
post_authorid = models.IntegerField(verbose_name=u'Authorid')
post_date = models.DateTimeField(auto_now_add=True,verbose_name=u'PostDate')
post_date_modified = models.DateTimeField(auto_now=True,verbose_name=u'LastModifiedTime')
post_content = models.TextField(verbose_name=u'Content')
post_title = models.CharField(max_length=50,verbose_name=u'Title')
post_name = models.CharField(max_length=50,blank=True,verbose_name=u'ShortName')
post_cover = models.CharField(max_length=200,verbose_name=u'CoverUrl')
post_introduction = models.CharField(max_length=500,blank=True,verbose_name=u'introduction')
post_status = models.ForeignKey(Status,verbose_name=u'status')
comment_status = models.BooleanField(verbose_name=u'show_comments')
post_password = models.CharField(max_length=20,blank=True,verbose_name=u'passwd')
post_tagid = models.ManyToManyField(Tags,verbose_name=u'tag')
post_threadtypeid = models.ForeignKey(ThreadTypes,verbose_name=u'ThreadType')
post_comment_conut = models.IntegerField(verbose_name=u'CommentsCount')
post_comments = models.ManyToManyField(Comments,blank=True,verbose_name=u'Comment')
def __unicode__(self):
return u"%s %s %s" % (self.id,self.post_title,self.post_date)
class Meta:
ordering = ['post_date']
class Tags(models.Model):
tagname = models.CharField(max_length=20,verbose_name=u'标签名称')
def __unicode__(self):
return u"%s %s" % (self.id,self.tagname)
class Meta:
ordering = ['id']

在我的 python shell 中,我输入:

post = Posts()

post.post_tagid = Tags.objects.get(id='1')

然后 django 引发一个 http 500 错误:

object needs to have a value for field "posts" before this many-to-many relationship can be used.

但是,当我使用时:

post= Posts.objects.get(id='1')

注意 - 我已经通过 Django admin 输入了 Posts 对象

然后,当我使用

post.post_tagid = Tags.objects.get(id='1')

一切顺利

问:如何在不引发此错误的情况下添加 ManyToMany 字段?

最佳答案

看起来这里的问题是您试图在数据库中实际创建 M2M 表之前将其添加到该表。

当您运行post = Posts()时,您会在内存中创建一个对象,但不会在数据库中。因此,当您随后尝试向 M2M 表中添加新条目时,没有任何内容可供引用。 (请记住,声明 M2M 字段会导致创建一个新表,其中包含指向关系两端的记录。)

解决方案是在尝试添加到 M2M 表之前运行 post.save()。 (Django 管理员在幕后为您做这件事。)

所以尝试这样的事情:

post = Posts()

# now set up the post (title, name, etc.)

post.save() # adds a new entry to the Posts table

post.post_tagid.add(tag) # now that your post exists in the DB this should work

关于python - 如何在 Django 中设置 ManyToMany 字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17826629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com