我有一个CreateView
视图,其中包含用户在创建新联系人时需要填充的大量字段。现在,我希望用户能够只查看和选择他们创建的类别。
这是类别的模型:
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):
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'
我需要用户看到的是一个只包含与其关联的相应配置文件外键的类别的选择。
我很高兴能得到一些帮助。谢谢!
答案 0 :(得分:2)
您可以覆盖视图的get_form
方法并设置相应字段的查询集:
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
模型与OneToOneField
User
有related_name
到'profile'
,否则您必须调整过滤