在表单__init__方法

时间:2018-01-21 07:59:46

标签: python django

我已经从我的django表单中过滤了一个字段查询集,现在突然在html页面中,当我点击提交它不再保存但是如果我评论该方法,我可以再次保存。我的代码

以下是非常感谢的任何帮助

模特:

class Model_A(models.Model):
    project_name = models.CharField(max_length=50, unique=True)
    project_manager = models.ForeignKey(Employee, on_delete=models.CASCADE, related_name='project_manager', null=True,
                                        blank=True)

    def __str__(self):
        return self.project_name

form.py:

class EditProjectForm(forms.ModelForm):
    prefix = 'edit_form'
    class Meta:
        model = Model_A
        fields = '__all__'    

    #Save failed after adding this method
    def __init__(self, user, *args, **kwargs):
        super(EditProjectForm, self).__init__(*args, **kwargs)
        self.fields['project_manager'].queryset = Employee.objects.filter(department__in=[18, 19, 20]).exclude(employment_status=6)

view.py:

def project_setting(request, project_id):
    form = EditProjectForm(request.POST or None, request.FILES or None, instance=selected_project, prefix='settings')
    if form.is_valid():
        inst = form.save(commit=False)
        inst.save()
        form.save_m2m()
        return HttpResponseRedirect('/projects/{}/setting'.format(project_id))
    context = {
        'form': form,
    }
    return render(request, '/projects/setting.html', context=context)

1 个答案:

答案 0 :(得分:-2)

更新:

找到解决方案,而不是从form.py中过滤查询集,只需使用以下行在view.py中查询:

form.fields['project_manager'].queryset = Employee.objects.filter(department__in=[18, 19, 20]).exclude(employment_status=6)