2012-04-18 16 views
0

私はこのことが、私にはいくつかの言語構造をよりよく理解する必要があると強く思っていますが、どこから始めるべきかわからないので、いくつかのコードを投げ捨てる必要があります。私の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を使用して、どのこの方法では、ビューが他のオブジェクトに緩く結合されているので、明らかに望ましいです - モデルを変更できます私は事をしなくてもそれで変化します。

残念ながら、私はというエラーになっている:私はいつもCDを打破し、blogEntry = BlogEntry(タイトル= CD [ 'タイトル']の手動辞書アプローチを構築することができ

'tags' is an invalid keyword argument for this function 

を... )そして、ただ一つずつタグを追加するだけですが、私はそれより良い選択肢があるべきです、そして、それらが何であるか分かりません:(

+0

まあですが、私はちょうどに気づきました私の人生を私のものよりも難しくしていたことを文書化しました。実際のフォームで.save()を呼び出すことができました。これは、フォームを作成するためにデータを整理することはおそらく必要ではないことを示唆しているため、サポートは限られています。 – RonLugge

+1

_ModelForm_でform.is_valid()を呼び出すと、フォームとモデルの両方のレベルで検証がトリガーされます。通常の状況では手動でデータをクリーンアップする必要はありません。 –

答えて

1

私はそれが沸騰すると思います**cdBlogEntryBlogTagのタイプがtagsであると予想していますが、代わりにそれを辞書に渡していますy型で、正しい型ではありません。これはhttp://anubis.blasux.ru/books/Python/www.djangoproject.com/documentation/0.96/models/many_to_many/

+0

問題の問題を回避する方法を見つけたとしても、正確に何かを乗り越えていたことを知っていただきありがとうございます。 – RonLugge

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を助けるかもしれない最初のBlogTagオブジェクトを作成し、BlogEntry

へのそれを渡し、locals()は悪いフォームとhttp://www.python.org/dev/peps/pep-0008/

+0

)地元の人が悪いのはなぜですか?私が使っているチュートリアルは、それを示唆しています! B)なぜそれがスローされているのかを示唆することなく誰かに投げる長いドキュメントです(私はすでにほとんどの場合それをフォローしているように見えますし、私がいない1つのケース - タブ - 私のスタイルがリストされていますオプションの場合は、最優先オプションではない) – RonLugge

+0

スペースは '='の代入、スペースは '=='、セミコロンは行末になく、4スペースはタブではなく標準ですタブ)...多分地元のものはスタイルの選択です(http://stackoverflow.com/questions/1901525/django-template-and-the-locals-trick)...私はDjangoの本でそれを参照してください。私は、テンプレートのコンテキストとしてlocals()を使って古いコードに戻って、個人的に振る舞うと思います。 –

+0

奇妙なことに、キャラクター(私の主要なコーディング言語としての強いCとPHPの背景)の反射的な使用を検閲しようとした私の試みを過ぎてしまった唯一のセミコロンで、ペーストしたコードにあります。私はもっ​​と多くのスペースで作業します(もう一つは、必要とされることなく、他の環境で作業している間に開発された習慣です)。 locals()の事に関しては、私はDRY要素に重点を置いていましたが(それがとても好きです)、リファクタリングのために作成するカップリングの問題を見ることもできます。 – RonLugge

関連する問題