2016-12-09 5 views
0

Я довольно новичок в кодировании в целом, поэтому, пожалуйста, простите мое невежество.Обновление ModelForm Django 1.10

У меня есть ModelForm (Django 1,10 -JUST в прецедентной) для 'пост' в социальной сети веб-сайт:

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:

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

Оказывается все, что мне нужно сделать, это удалить 'request.GET': в views.py:

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)) 

Спасибо всем, кто пытался помочь, особенно @ Загородный Алексей.

-1

Если вы хотите, чтобы показать исходные материалы в форме вы должны объявления некоторый код в ваш PostForm:

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 

, то вы должны загрузить его в вид

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

@ Загородный Алексей, без проблем, но он все еще не работает. Кто-то сказал мне, что я не передал запрос.GET правильно. Есть идеи? –