2017-06-19 11 views
0

私のアプリケーションでは、UserPostのオブジェクトを作成しています。各Postは、私が編集し、提出後の送信フォームを作成したいUserDjangoはModelFormフィールドをフォームに含めずに設定します

class Post(models.Model): 
    user = models.ForeignKey(User, on_delete = models.CASCADE) 
    ... 

を持っているので、私はDjangoののModelForm機能を使用する予定。

class PostForm(ModelForm): 
    class Meta: 
     model = Post 
     fields = "__all__" 

ただし、私がこれを行うと、フォームを見ている人は、誰が投稿者であるかを設定できます。結果のuserフィールドがそれらのフィールドであることを確認したい。私はのModelFormからuserフィールドを除外した場合でも、

class PostForm(ModelForm): 
    class Meta: 
     model = Post 
     exclude = 'user' 

は、ユーザーがフォームの送信には設定されません。私は、ポストフィールド

def submit_view(request): 
    .... 
    request.POST = request.POST.copy() 
    request.POST.update({ 
     'user' : request.user.id 
    }) 

    form = PostForm(request.POST, request.FILES) 
    .... 

をカスタムフォームを作成し、更新することでこれを回避する私の方法をハッキングしてきましたが、その後、私はいくつかの方法でFormクラスの目的に反し自動UI生成およびフォームバリデーションを失います。誰かが、Formにそれを含めずにuserフィールドを設定するという慣用的な方法を教えてもらえますか?

答えて

3

このビューを試してみてください:

def submit_view(request): 
    form = PostForm(request.POST or None) 
    if form.is_valid(): 
     new_post = form.save(commit=False) 
     new_post.user = request.user 
     new_post.save() 
+0

この場合、 'user'フィールドをModelFormから除外できますか? –

+0

はい、あなたはそれをレンダリングしたくないのですか?ユーザーはモデルインスタンスに直接格納されます。 –

+0

ありがとう、何らかの理由で私はそれがそれより複雑になると思った... –

0

view.py

from django.views.generic import CreateView 
from .models import Post 

class PostCreate(CreateView): 
    model = Post 
    template_name ="new_Post_form.html" 
    fields = ['text'] 

    def form_valid(self, form): 
     object = form.save(commit=False) 
     object.user = self.request.user 
     object.save() 
     return super(PostCreate, self).form_valid(form) 
    def get_success_url(self): 
     return "/" 

url.py

url(r'^newpost$',views.PostCreate.as_view(),name='post_new',), 

new_post_form.html

<form method="post" enctype="multipart/form-data" class="form" action="newpost" id="new-post-form"> 
<div class="modal-body"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Submit" /> 
</div> 

関連する問題