【发布时间】:2013-07-26 03:28:28
【问题描述】:
我正在练习使用 Django 的 FormViews。
在这个应用程序中,我正在创建一个用于创建博客文章的 PostCreate 视图。
这是我的代码:
models.py
class Post(models.Model):
user = models.ForeignKey(User)
post_title = models.CharField(max_length=200)
post_content = models.CharField(max_length=500)
class Tag(models.Model):
name = models.CharField(max_length=64, unique=True)
posts = models.ManyToManyField(Post)
forms.py
class PostForm(forms.ModelForm):
post_title = forms.CharField(
label=u'Title',
widget=forms.TextInput(attrs={'size':64})
)
post_content = forms.CharField(
label=u'Content',
widget=forms.TextInput(attrs={'size':128})
)
tags = forms.CharField(
label=u'Tags',
required=True,
widget=forms.TextInput(attrs={'size':64})
)
class Meta:
model = Post
exclude = ('user', 'post_date')
views.py
class PostCreate(CreateView):
template_name = 'app_blog/post_save_form.html'
model = Post
form_class = PostForm
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
tag_names = form.cleaned_data['tags'].split()
for tag_name in tag_names:
tag, dummy = Tag.objects.get_or_create(name=tag_name)
self.object.tag_set.add(tag)
return super(PostCreate, self).form_valid(form)
当我尝试将帖子(测试帖子 1)保存到数据库中时,它给了我一个错误:
需要有一个字段“post”的值才能使用这种多对多关系。
看起来问题是由views.py中的行引起的,我在其中拆分了“tag”字段并将标签添加到post对象的tag_set字段。我想这个逻辑不应该包含在 form_valid 方法中......但我不知道应该在哪里实现......
任何帮助将不胜感激 :) 谢谢
【问题讨论】:
标签: python django django-class-based-views