0

これは、なんらかの言語構造をよりよく理解する必要があることに帰着するのではないかと強く思っていますが、どこから始めればよいか分からないので、いくつかのコードを捨てる必要があります。

モデル:

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']...) の手動辞書アプローチを構築してから、タグを 1 つずつ追加することができますが、...もっと良いオプションが必要ですそれよりも、そして私はそれらが何であるかを知りません:(

4

2 に答える 2

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/

于 2012-04-19T00:49:08.067 に答える
1

**cd要するに、引数を辞書として渡すことだと思います。代わりに、適切なタイプではない辞書引数を渡しているためBlogEntryBlogTagタイプが必要です。tags最初にBlogTagオブジェクトを作成し、それをに渡しますBlogEntry

これは役立つかもしれませんhttp://anubis.blasux.ru/books/Python/www.djangoproject.com/documentation/0.96/models/many_to_many/

于 2012-04-19T00:21:18.450 に答える