为什么我的django形成多对多字段给我这个错误?

时间:2012-04-18 23:23:28

标签: python django

我强烈怀疑这可以归结为我需要更好地理解一些语言构造,但我不知道从哪里开始,所以我只需要抛出一些代码。

模型:

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'] ...)的手动字典方法然后只是逐个添加标签,但是...我应该有比这更好的选择,我只是不知道它们是什么:(

2 个答案:

答案 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/