【问题标题】:Is there any way to filtering the queryset dynamicaly in django forms for a foreignkey correct?有没有办法在 django 表单中动态过滤查询集以获得正确的外键?
【发布时间】:2019-12-07 06:31:56
【问题描述】:

我正在为这个模型创建一个表单

class SemAssign(models.Model):
    staff = models.ForeignKey(User, on_delete=models.CASCADE)
    semester = models.ForeignKey(Subject, on_delete=models.CASCADE, default=1)

    def __str__(self):
        return f'{self.staff.username}'

我的forms.py 看起来像

class SemAssignForm(forms.ModelForm):
    class Meta:
        model = SemAssign
        fields = ['staff','semester']

我根据views.py 中的用户定义过滤器创建了一个查询集

def assign_sem(request):
    if request.user.is_staff:
        dept = request.GET.get('department')
        sem = request.GET.get('semester')
        form=SemAssignForm(request.POST)
        #form.fields['staff'].queryset = User.objects.filter(is_staff=True, profile__Department=dept)
        #form.fields['semester'].queryset = Subject.objects.filter(sem=sem)

        if form.is_valid():
            SemAssign=form.save()
            return redirect('dashboard')

当查询完美运行时,表单被验证为错误。如果我不进行查询,则表单已成功验证。我确定我在查询外键集时遗漏了某个地方。有人可以找我吗?

我的朋友建议我使用 modelformset,但这不是我的范围。我只想根据GET 请求过滤器过滤SemAssign 模型的字段。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    您应该将创建表单和处理提交表单的代码分开。通常第一个是 GET,第二个是 POST。所以是这样的:

    def assign_sem(request):
        if request.method == 'GET':
            # Your code to create the form and set the right querysets
        elif request.method == 'POST'::
            # Your code to check that the submitted form is valid and save it
    

    【讨论】:

      猜你喜欢
      • 2010-12-11
      • 2011-12-28
      • 2013-09-17
      • 2020-10-22
      • 1970-01-01
      • 2021-12-18
      • 2021-11-09
      • 1970-01-01
      • 2017-12-05
      相关资源
      最近更新 更多