Python Django CreateView-仅在foreignkey字段中显示特定对象

Python Django CreateView-仅在foreignkey字段中显示特定对象,python,django,django-class-based-views,Python,Django,Django Class Based Views,我有一个CreateView视图,其中包含一系列字段,用户在创建新联系人时需要填写这些字段。现在,我希望用户能够查看和选择他们创建的类别。 这是类别的模型: class Category(models.Model): class Meta: verbose_name = _('category') verbose_name_plural = _('categories') name = models.CharField(max_length=10

我有一个
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'
我需要用户看到的是一个select,它只包含与之相关联的相应概要文件外键的类别


我很高兴能得到一些帮助。谢谢大家!

您可以覆盖视图的
get\u 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
当然,这是假设您的
配置文件
模型有一个
OneToOneField
用户
,并且具有
相关的\u名称
“配置文件”,否则您必须调整过滤