【问题标题】:Django CreateView - Display only particular objects in foreignkey fieldDjango CreateView - 仅在外键字段中显示特定对象
【发布时间】:2018-05-02 17:06:19
【问题描述】:

我有一个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'

我需要用户看到的是一个选择,它只有包含与其关联的适当配置文件外键的类别。

我很乐意在这方面得到一些帮助。谢谢!

【问题讨论】:

    标签: python django django-class-based-views


    【解决方案1】:

    可以覆盖视图的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 模型具有 OneToOneFieldUserrelated_name 'profile',否则您必须调整过滤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多