kid*_*win 8 python django models
在学习Django做网络编程的同时,我遇到了这个问题.我搜索谷歌和Django的官方网站biut找不到任何答案.请帮我.
系统环境:
运行时: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']
Run Code Online (Sandbox Code Playgroud)
在我的python shell中,我输入:
post = Posts??
post.post_tagid = Tags.objects.get(id='1')
Run Code Online (Sandbox Code Playgroud)
然后django rasise一个http 500错误:
在可以使用多对多关系之前,对象需要具有字段"posts"的值.
但是,当我使用:
post= Posts.objects.get(id='1')
Run Code Online (Sandbox Code Playgroud)
注意 - 我已经通过Django admin输入了Posts对象
然后,当我使用
post.post_tagid = Tags.objects.get(id='1')
Run Code Online (Sandbox Code Playgroud)
一切顺利.
问:如何在不引发此错误的情况下添加ManyToMany字段?
Kev*_*nry 18
看起来这里的问题是你在M2M表中实际创建数据库之前尝试添加一些东西.
运行时post = Posts??,在内存中创建一个对象,但不在数据库中创建.因此,当您尝试向M2M表添加新条目时,没有任何内容可供参考.(请记住,声明一个M2M字段会导致创建一个新表,其中的记录指向关系的两端.)
解决方案是post.save()在尝试添加到M2M表之前运行.(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
Run Code Online (Sandbox Code Playgroud)
您应该阅读有关多对多关系的官方 django 文档。
在您的情况下,以下代码应该会有所帮助:
# Post object
post= Posts.objects.get(id=1)
# Two tag objects
tag1 = Tags.objects.get(id=1)
tag2 = Tags.objects.get(id=2)
# Add tag objects to Post object
post.post_tagid.add(tag1, tag2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16502 次 |
| 最近记录: |