如何使用 ModelForm 过滤 Django 表单中的值?

2024-01-11

我正在尝试使用 ModelForm 添加我的数据。它工作得很好,除了外键下拉列表显示所有值,我只希望它显示与登录用户相关的值。

这是我要添加的记录 ExcludedDate 的模型:

class ExcludedDate(models.Model):
    date = models.DateTimeField()
    reason = models.CharField(max_length=50)
    user = models.ForeignKey(User)
    category = models.ForeignKey(Category)
    recurring = models.ForeignKey(RecurringExclusion)

    def __unicode__(self):
        return self.reason

这是该类别的模型,它是包含我想按用户限制的关系的表:

class Category(models.Model):
    name = models.CharField(max_length=50)
    user = models.ForeignKey(User, unique=False)

    def __unicode__(self):
        return self.name

最后是表单代码:

class ExcludedDateForm(ModelForm):

    class Meta:
        model = models.ExcludedDate
        exclude = ('user', 'recurring',)

如何使表单仅显示类别子集,其中category.user 等于登录用户?


您可以在以下位置自定义您的表单init

class ExcludedDateForm(ModelForm):
    class Meta:
        model = models.ExcludedDate
        exclude = ('user', 'recurring',)
    def __init__(self, user=None, **kwargs):
        super(ExcludedDateForm, self).__init__(**kwargs)
        if user:
            self.fields['category'].queryset = models.Category.objects.filter(user=user)

在视图中,构建表单时,除了标准表单参数之外,您还可以指定当前用户:

form = ExcludedDateForm(user=request.user)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 ModelForm 过滤 Django 表单中的值? 的相关文章

随机推荐