当前位置: 首页 > 面试题库 >

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

呼延聪
2023-03-14
问题内容

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

这是我要添加的记录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)


 类似资料:
  • 问题内容: 说我的内容如下: 即有多个,每个都有一个和的范围。每个数据库都应有一个从其父数据库中选择的基础,而不是另一个。 创建用于添加的表单时,我想删除选择(因为已经通过页面上的“添加客户端”按钮Rate选择了该选项),并且也将选择限制于此。 我该如何在Django 1.0中做到这一点? 目前,我当前的文件只是样板文件: 而且也是基本的: 在Django 0.96中,我能够通过在渲染模板之前进行

  • 问题内容: 说我的内容如下: 即有多个,每个都有一个和的范围。每个数据库Client都应有一个Rate从其父数据库中选择的基础,而不是另一个。 创建用于添加的表单时,我想删除选择(因为已经通过页面上的“添加客户端”按钮选择了该选项),并且也将选择限制于此。 我该如何在Django 1.0中做到这一点? 目前,我当前的forms.py文件只是样板文件: 而且views.py也是基本的: 在Djang

  • 问题内容: 我敢肯定这是一个微不足道的操作,但是我不知道它是如何完成的。 肯定有比这更聪明的东西: 我正在寻找将它们全部添加到一个查询中,例如: 如何使用值列表过滤Django查询? 问题答案: 从Django文档中:

  • 问题内容: 我是django和jquery的新手。我正在开发一个基于django的应用程序,其中有3个下拉列表。1.校园2.学校3.中心 层次结构是:校园有学校,学校有中心。我想链接这些下拉菜单。 例如,我有3个校园,例如Campus1,Campus2,Campus3。如果选择“校园1”,则应该只选择“校园1”中的学校并继续执行此操作;如果选择“学校1”,则需要能够选择“学校1”的中心,并且所有其

  • 我有一个基于selectOneMenu的过滤器的树状表,就像primeface展示展示。 我试图用selectCheckBoxMenu替换selectOneMenu,以过滤多个选中值。 我可以选择CheckBoxMenu与所有必要的项目,我得到选定的项目在我的豆,但我不知道如何过滤? 我必须在服务器端重建我的TreeNode并删除所有不需要的节点吗?

  • 问题内容: 我开始使用django-tables2(从第一印象中就可以强烈推荐),我问自己如何实现列过滤。我找不到合适的文档,但是我确定它在那里。 问题答案: 答案有点晚了,但是无论如何…我也找不到任何合适的文档来进行列过滤。有很多方法可以做到这一点: 答:手动:我添加了一个包含要过滤的字段的表单,然后在我的视图中执行以下操作: 这很好用,但是不是那么干,因为它在视图中是硬编码的。 B.使用Sin