2016-12-09 13 views
0

私は一般的にコーディングするのがかなり新しいので、私の無知を許してください。ModelForm Djangoを更新する1.10

models.py:

class Post(models.Model): 
    user = models.ForeignKey(User) 
    text = models.TextField() 
    image = models.ImageField(blank=True) 
    draft = models.BooleanField(default=False) 
    submission_date = models.DateTimeField(auto_now_add=True) 

    def __unicode__(self): 
     return self.text 

forms.py:

私はソーシャルネットワークのウェブサイト上の 'ポスト' のためのModelForm(大文字でジャンゴ1.10 -JUST)を持っています

class PostForm(forms.ModelForm): 
    class Meta: 
     model = Post 
     fields = ['text', 'image', 'draft'] 

記事を更新するには、これがその機能です: views.py:

def edit_post(request, post_id): 
    post = get_object_or_404(Post, pk=post_id) 

    if not request.user.is_superuser and\ 
    not request.user == post.user: 
    raise PermissionDenied 

    if request.method == 'POST': 
    form = PostForm(request.POST, instance=post) 
    if form.is_valid(): 
     post = form.save(commit=False) 
     post.user = request.user 
     post.save() 
     context = {'post': post,'form': form} 
     return HttpResponse(render(request, 'accounts/view_post.html', context)) 

    elif request.method == 'GET': 
    form = PostForm(request.GET, instance=post) 
    context = {'post': post,'form': form} 
    return HttpResponse(render(request, 'accounts/edit_post.html', context)) 
テンプレートで

<form action="" method="post" enctype="multipart/form-data"> 
{% csrf_token %} 
{% include 'accounts/form_template.html' %} 
<input class="btn btn-btn-success" type="submit" value="Save Post"> 
</form> 

私の質問がされています。更新しようとしたときに、なぜ元のフィールドの入力が表示されませんか?私が新しい投稿を作成しているかのように、フィールドは空になります。

詳細な回答が多いほど、私はそれを高く評価します。 ありがとうございます。

+0

form_template.htmlはどのように見えるのですか? –

+0

@DanielRoseman、私はちょうど私がおよそform_template.html {フォーム%でフィールドの%}

{{ field }}

{%ENDFOR%}そのことについて申し訳ありません を忘れて実現.. –

答えて

0

が判明あなたがビューにして、それをロードする必要があり、その後

class PostForm(forms.ModelForm): 
    class Meta: 
    model = Post 
    fields = ['text', 'image', 'draft'] 

    def __init__(self, *args, **kwargs): 
    super(PostForm, self).__init__(*args, **kwargs) 
    for key in self.fields: 
     self.fields[key].required = False 

を views.py中:私が行うために必要なすべてを削除 'request.GET' だった

def edit_post(request, post_id): 
    post = get_object_or_404(Post, pk=post_id) 
    ... 
    ... 
    elif request.method == 'GET': 
     form = PostForm(instance=post) 

     context = {'post': post, 
        'form': form} 
     return HttpResponse(render(request, 'accounts/edit_post.html', context)) 

特に@Zagorodniy Olexiyを助けようとした皆さん、ありがとう。

-1

フォームで、元の入力を表示したい場合は、広告にPostFormでいくつかのコードがあります。

def edit_post(request, post_id): 
    post = get_object_or_404(Post, pk=post_id) 
    if not request.user.is_superuser and\ 
    not request.user == post.user: 
     raise PermissionDenied 

    if request.method == 'POST': 
     form = PostForm(request.POST, request.FILES, instance=post) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.user = request.user 
      post.save() 
      context = {'post': post, 
         'form': form} 
      return HttpResponse(render(request, 'accounts/view_post.html', context)) 

    elif request.method == 'GET': 
     form = PostForm(request.GET, instance=post) 

     context = {'post': post, 
        'form': form} 
     return HttpResponse(render(request, 'accounts/edit_post.html', context)) 
+0

返信いただきありがとうございます。 ExtraProfileDataFormとは何ですか? –

+0

ただ編集しました、それは私の間違いでした。申し訳ありません。 –

+0

@ Zagorodniy Olexiy、問題はありませんが、まだ動作していません。誰かが私に要求を伝えていないと言った。正しく行ってください。何か案は? –