2016-04-15 17 views
0

私はDjangoを学んでいますので、これについてはわかりません。何が起こっているdjangoの2つのモデル

は、私は2つのテーブルを持っているということです。

  1. 表のブログ投稿:すべてのポストを保存します。
  2. 表C:登録簿カテゴリのIDを保存します。

マイmodel.py

class BlogPost(models.Model): 

    title=models.CharField(max_length=150) 
    author = models.ForeignKey(User) 
    categorias_post = models.ManyToManyField(Categoria) 
    body = RichTextField(('Content of post')) 
    creada_en = models.DateTimeField(auto_now_add=True) 
    actualizada_al = models.DateTimeField(auto_now=True) 

マイforms.py

class FormularioPost(forms.ModelForm): 

    class Meta: 
     model = BlogPost 
     fields = ('title', 'author', 'categorias_post', 'body') 

私のviews.py

def postregistrado(request): 

    if request.method == "POST": 
     form = FormularioPost(request.POST) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.author = request.user 
      post.save 

     messages.success(request, 'Su post ha sido registrado con éxito.') 
    else: 
     form = FormularioPost() 

    return render_to_response(
     "postRegistrado.html", 
     locals(), 
     context_instance=RequestContext(request), 
     ) 

同じviews.pyから2つの異なるテーブルに挿入したいと思います。誰もそれで私を助けることができますか?

答えて

0

commit=Falseを使用している場合は、多くのフィールドを保存するには、save_m2m()を明示的に呼び出す必要があります。お使いのモデルが 別のモデルで多対多の関係を持っているとき= Falseのコミット使用の

if form.is_valid(): 
    post = form.save(commit=False) 
    post.author = request.user 
    post.save() #Note that it is a function call. 
    post.save_m2m() 

あなたはdocumentation here

にこの上で詳細を読むことができます別の副作用が見られます。お使いのモデルが 多対多の関係を持っており、あなたが フォームを保存するときに= Falseのコミットを指定すると、Djangoはすぐに 多対多の関係のためのフォームデータを保存することはできません。これは、 データベースにインスタンスが存在するまで、インスタンスのmany-to-manyデータを保存することができないためです。

commit = Falseを使用してフォームを保存するたびに、DjangoはModelForm サブクラスにsave_m2m()メソッドを追加します。 フォームで生成されたインスタンスを手動で保存した後、save_m2m()を呼び出して多対多のフォームデータを保存できます。

もう一つは、post.author = request.user匿名ユーザー

と評価されたとき、あなたは奇妙な問題に遭遇しないようにあなたは、このビューに login_required decoratorを追加することを確認しています
関連する問題