2014-09-01 3 views
1

로그인 한 사용자의 블로그 게시물 만 표시하도록 formset을 필터링하는 방법을 알아낼 수 없습니다. 양식은 훌륭하게 렌더링되지만 모든 사용자가 블로그 포스트를 소유 한 사람과 관계없이 모든 블로그 포스트에 사진을 지정할 수 있습니다. blogposts의 옵션을 로그인 한 사용자 만 필터링하려면 어떻게합니까?Django Formset은 사용자 객체로 필터링하지 않습니다.


views.py

@login_required 
def addimage(request): 
    user = request.user 
    blogposts = Blogpost.objects.filter(user=user) 
    print blogposts 
    imageformset = modelformset_factory(Image, AddImageForm,extra=1) 
    if request.method == "POST": 
     formset = imageformset(request.POST, request.FILES) 
     if formset.is_valid() : 
      for form in formset.cleaned_data: 
        image = form['image'] 
        title = form['title'] 
        blogpost = form['blogpost'] 
        description = form['description'] 
        photo = Image(
         title = title, 
         image= image, 
         blogpost=blogpost, 
         description=description, 
         ) 
        photo.user = request.user 
        photo.save() 

      messages.success(request, 'We did it. Pictures are on the interwebs!') 
      return HttpResponseRedirect("/%s/%s/" % (user, blogpost.slug)) 


    else: 
     formset = imageformset() 

    return render_to_response('photos/add_photos.html', { 
     'formset' : formset, 
     'blogpost' : blogposts, 
     }, 
     context_instance=RequestContext(request)) 

forms.py

from django import forms 
from .models import * 

class AddImageForm(forms.ModelForm): 
    class Meta: 
     model = Image 
     fields = ('image', 'title', 'blogpost', 'description') 

Add_photos.html

{% extends "base.html" %} 
{% load static %} 
{% block content %} 
<div> 
    <form action="" method="POST" enctype="multipart/form-data">{% csrf_token %} 
    <div id="submit"><input id="submit-btn" type="submit" value="Save"></div> 
     {{ formset.management_form }} 
     {{ formset.as_p }} 

     <input type="submit" value="Save"> 
    </form> 
</div> 
{% endblock %} 
,174,

답변

2

blogpost 필드가 ForeignKey 인 것 같습니다. 기본적으로 이것은 django.forms.ModelChoiceField로 표현됩니다. 이 ChoiceField는 Model QuerySet 모델을 상속받습니다. ModelChoiceField에 대한 참조를 참조하십시오.

그래서 필드의 쿼리 세트 특성에 사용자 정의 QuerySet을 제공하려고합니다. 이것은 양식 작성 방법에 따라 약간 다릅니다. 생성자에서 가장 쉽게 찾을 수 있지만 formset 팩토리를 사용하면 약간 까다 롭습니다. 당신이 해당 formset 구성 후이 작업을 시도 할 수 있습니다 :

formset = imageformset() 
for form in formset.forms: 
    form.fields['blogpost'].queryset = Blogpost.objects.filter(user=user) 

난 당신이 또한 수행해야합니다 생각을 당신이 request.method에() formset.is_valid 호출하기 전에 == 코드의 'POST'지점.

+0

오류 가져 오기 "AddImageFormFormSet 개체에 특성 '필드가 없습니다.' '모든 의견? – baconck

+0

'fields'는 formset이 아니라'form'에 있습니다. 양식을 반복하고 있습니까? 'form [ 'fields']'에 액세스해야 할 수도 있습니다. –

+0

이것은 나를 위해 일했다 : formset = UploadFormSet() form.fields [ 'blogpost']. 양식에 대한 양식에 대한 queryset = Blogpost.objects.filter (사용자 = 사용자) – baconck

관련 문제