3

ModelForm에서 필드를 필터링하려고합니다. 내보기에 대한 일반 CreateView 서브 클래 싱입니다. 웹에서 내 문제에 대한 많은 참조를 찾았지만 솔루션은 Django 1.3의 클래스 기반보기에서 작동하지 않습니다. 여기 Django 1.3 CreateView, ModelForm 및 request.user별로 필드 필터링

내 모델이다 :

여기
#models.py 

class Subscriber(models.Model): 

    user = models.ForeignKey(User) 
    subscriber_list = models.ManyToManyField('SubscriberList') 
    .... 

class SubscriberList(models.Model): 

    user = models.ForeignKey(User) 
    name = models.CharField(max_length=70) 
.... 

내이다 : 여기

#views.py 

class SubscriberCreateView(AuthCreateView): 
    model = Subscriber 
    template_name = "forms/app.html" 
    form_class = SubscriberForm 
    success_url = "/app/subscribers/" 

    def form_valid(self, form): 
     self.object = form.save(commit=False) 
     self.object.user = self.request.user 
     return super(SubscriberCreateView, self).form_valid(form) 

인 필터없이, 가입자를 추가 내 원래 형태 : 여기

#forms.py 

class SubscriberForm(ModelForm): 

    class Meta: 
     model = Subscriber 
     exclude = ('user', 'facebook_id', 'twitter_id') 

필터링을 시도했지만 작동하지 않는 수정 된 양식입니다.

#forms.py 

class SubscriberForm(ModelForm): 

    class Meta: 
     model = Subscriber 
     exclude = ('user', 'facebook_id', 'twitter_id') 

    def __init__(self, user, **kwargs): 
     super(SubscriberForm, self).__init__(**kwargs) 
     self.fields['subscriber_list'].queryset = SubscriberList.objects.filter(user=user) 

나는 그래서이 수정 된 형태를 변경하는 경우 :

def __init__(self, user=None, **kwargs)

의미가 있습니다 - 그것은 나에게 NO 가입자 목록을 제공합니다. 그러나 요청 사용자를 전달하려고 시도하는 어떤 방법으로도 나는 항상 "요청"이름 또는 "자체"이름이 정의되지 않은 오류 메시지를받습니다.

그렇다면 request.user를 통해 subscriber_list를 필터링하고 Django 1.3의 CreateView를 사용하는 코드를 수정하려면 어떻게해야합니까?

답변

14

나는 당신이 여러 곳에서이 질문을 게시 한 것을 본다. 그리고 그것이 내가 같은 것을 알아 내려고 노력했기 때문에 발견 한 방식이다. I 생각하다. 방금 ​​작동했는데 여기에 내가 한 일이있다. StackOverflow에 내 brain_에 _link을 가지고 그것을하는 방법을

class MyCreateView(CreateView): 

    def get_form(self, form_class): 
     form = super(MyCreateView,self).get_form(form_class) #instantiate using parent 
     form.fields['my_list'].queryset = MyObject.objects.filter(user=self.request.user) 
     return form 
+0

: 나는 특정 양식 필드의 검색어 필터링 FormMixin에서 get_form()를 덮어 내 정확한 질문에 대답 보는 것이 아주 좋은,하지만 approximatively로부터 답 날짜를보고 나는 똑같은 질문을했다. – makapuf

+0

이것도 나에게 도움이되었다 ... 여기, upvote –

+0

왜 이것이 정답으로 선택되지 않습니까? – MiniGunnR