Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django CreateView、UpdateView中筛选值_Django_Django Forms - Fatal编程技术网

如何在Django CreateView、UpdateView中筛选值

如何在Django CreateView、UpdateView中筛选值,django,django-forms,Django,Django Forms,我正在尝试使用CreateView和UpdateView修改记录。我的问题是ForeignKey下拉列表列出了所有公司的值(Psa.number),而不是用户所属公司的值 class Psa(models.Model): owner = models.ForeignKey(Employer) number = models.PositiveIntegerField(unique=True... type = models.CharField(max_length=6 ..

我正在尝试使用CreateView和UpdateView修改记录。我的问题是ForeignKey下拉列表列出了所有公司的值(Psa.number),而不是用户所属公司的值

class Psa(models.Model):
    owner = models.ForeignKey(Employer)
    number = models.PositiveIntegerField(unique=True...
    type = models.CharField(max_length=6 ...

class Employer(models.Model):
employer_name = models.CharField(max_length=100, unique=True)
表格:

class PsaCreateForm(forms.ModelForm):
class Meta:
    model = Psa
    fields = [
        'number',
        'type',
    ]
解决这个问题的最好办法是什么?我还有几个其他条件使用相同的公司foreignkey关系,因此有没有办法在模型上创建一个方法,以便我可以重用?

您需要在CreateView和UpdateView中获取表单(self):

forms.py:

class PsaCreateForm(forms.ModelForm):

    model = Psa
    fields = [
        'number',
        'type',
    ]

    def __init__(self, *args, **kwargs):
        self.current_user = kwargs.pop('user')
        super(PsaCreateForm, self).__init__(*args, **kwargs)
        if self.current_user:
            self.fields['number'].queryset = Psa.objects.filter(owner=self.current_user)
views.py

class PsaCreate(CreateView):
    model = Psa
    template_name = 'form.html'
    form_class = PsaCreateFrom

    def get_form_kwargs(self):
        kwargs = super(PsaCreate, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs
这也是个好主意。在视图中设置def调度(self、request、*args、**kwargs)

def dispatch(self, request, *args, **kwargs):
    obj = self.get_object()
    if obj.owner != self.request.user:
        return HttpResponseRedirect(reverse('home'))
    return super(PsaUpdate, self).dispatch(request, *args, **kwargs)

我使用此命令得到以下错误:super(type,obj):obj必须是type的实例或子类型