2012-06-18 3 views
0

Post 및 PostImage 모델이있는 장고 앱이 있습니다.Django - 일대 다 관계가있는 모델의 업데이트 페이지

각 게시물에는 여러 개의 PostImages가 있습니다. 포스트에

내가 포스트와 PostImages 모두 형태를 가지고 페이지를 추가 할 수 있습니다. PostImages에 formset을 사용했습니다. 내가 원하는만큼 이미지 게시물을 만들 수 있어요, 내가 PostImage 더 많은 형태를 추가 할 jQuery를 사용

def post_new(request, template_name="posts/new.html"): 


    post_form = Post(request.POST or None, request.FILES or None) 
    PostImageFormSet = formset_factory(PostImageForm, extra=1) 
    post_image_formset = PostImageFormSet(request.POST or None, request.FILES or None, prefix='post_images') 

    if post_form.is_valid() and post_image_formset.is_valid(): 
    post = post_form.save(commit=False) 
    post.save() 
    for post_image_form in post_image_formset: 
     post_image = post_image_form.save(commit=False) 
     post_image.post = post 
     post_image.save() 

    redirect_url = urlresolvers.reverse('post_show') 
    return HttpResponseRedirect(redirect_url) 

    form_data = {'post_form': post_form, 'post_image_formset': post_image_formset} 
    csrfContext = RequestContext(request, form_data) 
    return render_to_response(template_name, csrfContext) 

, 그것은 완벽하게 잘 작동 : 다음 뷰에 대한 코드입니다.

이제 post_edit 페이지가 비슷한 방식으로 작동하기를 바랍니다.

def post_edit(request, post_slug, template_name="developers/posts/edit.html"): 
    post = get_object_or_404(post, slug=post_slug) 
    post_images = PostImage.objects.filter(post_id=post.id) 
    count = len(post_images) 
    post_form = postForm(request.POST or None, request.FILES or None, instance=post) 
    postImageFormSet = formset_factory(postImageForm, extra=count) 
    post_image_formset = postImageFormSet(request.POST or None, request.FILES or None, prefix='post_images') 

    for post_image_form, post_image in zip(post_image_formset.forms, post_images): 
    post_image_form.initial = post_image 
    if post_form.is_valid(): 
    post_form.save() 
    redirect_url = urlresolvers.reverse('developer_post_show', args=[post_slug]) 
    return redirect(redirect_url) 

    form_data = {'post_form': post_form, 'post_image_formset': post_image_formset} 
    csrfContext = RequestContext(request, form_data) 
    return render_to_response(template_name, csrfContext) 

여기에 편집 페이지 내 템플릿입니다 :

'PostImage'객체에는 속성이 없습니다 :

{% extends "base.html" %} 

{% block content %} 
{% load thumbnail %} 

    {% if error_message %} <p><strong>{{ error_message }}</strong></p> {% endif %} 
    {{ post_form.errors }} 
    <div style="width: 80%; margin: 0 auto;"> 
    <form action="" method="post"> 
     {% csrf_token %} 
     <div> 
     ... Post related HTML 
     </div> 

     <div class="post-images" style="clear: both;"> 
     {% for post_image_form in post_image_formset %} 
      <div> 
      {{ post_image_form.caption }} 
      </div> 
     {% endfor %} 
     </div> 

     <div style="clear: both; position: relative; left: 320px;"> 
     <input type="submit" value = "Update post" /> 
     </div> 

    </form> 
    </div> 
{% endblock %} 

내가 말을 내 템플릿에 오류가 여기에 post_edit보기 방법에 대한 내 코드는 'get'

내 템플릿에서 post_image_formset 개체를 반복하고 3 번 반복합니다. 해당 게시물에는 3 개의 이미지가 있습니다. 하지만 여전히이 오류가 발생합니다. 누구든지 도와 줄 수 있습니까?

감사합니다. 귀하의 PostImageForm

+0

오류가 발생하는 템플릿 부분을 보여줍니다. 왜 'get'이라고 부르려고합니까? 변수에 액세스 할 때 사소한 오류가 발생하는 것 같습니다. –

+0

내 질문이 업데이트되었고, 편집 페이지 용 템플릿이 추가되었습니다. 템플릿에서 방금 post_image 캡션에 액세스하려고했습니다. 감사. – rookieRailer

+0

"{{post_image_form}}"이라고 말하거나 전체 for 루프를 "{{post_image_formset}}"으로 바꾸면 어떻게됩니까? 같은 오류가 발생합니까? https://docs.djangoproject.com/ko/1.4/topics/forms/formsets/#using-a-formset-in-views-and-templates –

답변

0

ModelForm이다. 편집보기에서는 initial 속성을 사용하여 기존 인스턴스를 제공합니다. 이것은 권장되는 방법이 아니므로 오류가 그 증상 일 수 있습니다.

To provide initial instances a QuerySet is used.

귀하의 경우에는이 같을 것이다 : 당신은 또한 POST vs. GET requests in form views를 처리 권장되는 방법을 사용할 수 있습니다

def post_edit(request, post_slug, template_name="developers/posts/edit.html"): 
    post = get_object_or_404(post, slug=post_slug) 
    post_images = PostImage.objects.filter(post_id=post.id) 

    PostImageFormSet = formset_factory(postImageForm, extra=2) 
    formset = PostImageFormSet(queryset=post_images) 

.

관련 문제