2017-11-19 8 views
2

새 연락처를 만들 때 사용자가 채워야 할 일련의 필드가 들어있는 CreateView보기가 있습니다. 이제는 사용자가 만든 범주에서만보고 선택할 수 있기를 바랍니다. 내가 볼 수있는 사용자가 필요한 것은Django CreateView - 외래 키 필드의 특정 개체 만 표시

class ContactCreate(LoginRequiredMixin, generic.edit.CreateView): 
    model = models.Contact 
    success_url = reverse_lazy('site:contacts') 
    fields = ['firstname', 'lastname', 'phone1', 'phone2', 'email', 'city', 'category'] 
    template_name = 'site/contacts.html' 
    context_object_name = 'all_contacts' 

연관된 해당 프로파일 외래 키 만 포함 카테고리를 가지고있는 선택입니다 :

class Category(models.Model): 
    class Meta: 
     verbose_name = _('category') 
     verbose_name_plural = _('categories') 

    name = models.CharField(max_length=100, unique=True) 
    profile = models.ForeignKey(Profile, on_delete=models.CASCADE) 

    def __unicode__(self): 
     return self.name 

이것은이다 : 이 카테고리의 모델입니다 그들과 함께.

나는 이것에 대해 도움을 얻을 수있어서 기쁩니다. 고맙습니다! 그렇지 않으면,

class ContactCreate(LoginRequiredMixin, generic.edit.CreateView): 
    # ... 
    def get_form(self, *args, **kwargs): 
     form = super(ContactCreate, self).get_form(*args, **kwargs) 
     form.fields['categories'].queryset = Category.objects.filter(profile=self.request.user.profile) 
     return form 

이, 물론, Profile 모델 related_name'profile'UserOneToOneField이 있다고 가정합니다 :

답변

2

당신은보기의 get_form 방법을 무시하고 해당 필드의 검색어 세트를 설정할 수 있습니다 필터링을 조정해야합니다.