我强烈怀疑这可以归结为我需要更好地理解一些语言构造,但我不知道从哪里开始,所以我只需要抛出一些代码。
模型:
class BlogTag(models.Model):
tag = models.CharField(max_length=255)
def __unicode__(self):
return self.tag
class BlogEntry(models.Model):
title = models.CharField(max_length=255)
body = models.TextField()
date = models.DateTimeField()
tags = models.ManyToManyField(BlogTag)
def __unicode__(self):
return self.title
形式:
class BlogForm(ModelForm):
class Meta:
model = BlogEntry
视图:
title='New Blog Entry'
if request.method=='POST':
form=BlogForm(request.POST)
if form.is_valid():
cd=form.cleaned_data
blogEntry=BlogEntry(**cd)
blogEntry.save()
else:
form=BlogForm();
return render_to_response('blog_add.html', locals())
通过使用** cd,我能够将清理后的数据直接输入到我的对象中,这显然是可取的,因为这种方式视图与其他对象松散耦合 - 我可以更改模型,其他一切都随之改变没有我做任何事情。
不幸的是,我收到的错误是:
'tags' is an invalid keyword argument for this function
我总是可以分解CD并构建blogEntry = BlogEntry(title = cd ['title'] ...)的手动字典方法然后只是逐个添加标签,但是...我应该有比这更好的选择,我只是不知道它们是什么:(
答案 0 :(得分:1)
我认为它归结为**cd
将作为字典传入参数。 BlogEntry
期待BlogTag
的{{1}}类型,而不是正确类型的字典参数。首先创建一个tags
对象,然后将其传递给BlogTag
这可能会有助http://anubis.blasux.ru/books/Python/www.djangoproject.com/documentation/0.96/models/many_to_many/
答案 1 :(得分:1)
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#the-save-method
if request.method == 'POST':
form = BlogForm(request.POST)
if form.is_valid():
blogEntry = form.save()
# redirect ..
else:
form = BlogForm()
context = {
"form": form,
# ...
}
return render_to_response('blog_add.html', context)
PS,locals()
格式错误,http://www.python.org/dev/peps/pep-0008/