【问题标题】:Django : How to filter in formDjango:如何过滤表单
【发布时间】:2015-06-15 19:29:10
【问题描述】:

我有模特

class Demande_Expertise(models.Model):
    user = models.ForeignKey(User)
    material = models.CharField(_('material'), max_length=30)
    categorie =  models.ForeignKey("Category")

class Category(models.Model):
    name = models.CharField(_('name'), max_length=50)

我的类别有记录:合金、陶瓷、复合材料、Cu_based、Metals、Pure_metals、Ni_based

表格

class Demande_ExpertiseForm(forms.ModelForm):
    class Meta:
        model = Demande_Expertise
        exclude =  ('etat',)

    def __init__(self, *args, **kwargs):
        super(Demande_ExpertiseForm, self).__init__(*args, **kwargs)

模板

<td>{{ form.categorie}}</td>

如果我想要模板,如何获得表格:陶瓷、铜基、镍基?

如果我写在 Demande_ExpertiseForm 中

self.fields['categorie'].queryset = Category.objects.filter(name__icontains="Cu_based")

我只得到基于 Cu_based 的过滤器

如果我想要陶瓷、Cu_based、Ni_based 过滤器 怎么办?

【问题讨论】:

  • Django Filters - or? 的可能重复项
  • @Sayse,我认为问题是“如何在表单中使用 3 个对象?”
  • 它适用于 Category.objects.filter(Q(name__icontains="Ceramic") | Q(name__icontains="Ni_based") | .....) 谢谢

标签: django forms filter


【解决方案1】:

你可以使用'Q'

from django.db.models import Q

self.fields['categorie'].queryset = Category.objects.filter(Q(name__icontains = 'Cu_based') | Q(name_icontains = 'Ceramic') | Q(name_icontains = 'Ni_based'))

【讨论】:

  • 第一个:你解压的值太多,第二个我有一个空的下拉列表
  • 对不起,我不知何故认为这是一个和操作。
  • self.fields['categorie'].queryset = Category.objects.filter(reduce(lambda x, y: x | y, [Q(name__contains=word) for word in malist]))并且使用malist=['Cu_based', 'Ceramic', 'Ni_based', 'Ti_based']......它可以工作
猜你喜欢
  • 1970-01-01
  • 2017-03-29
  • 2012-01-24
  • 2014-06-20
  • 1970-01-01
  • 2020-10-01
  • 2021-11-15
  • 2014-02-10
  • 2011-03-01
相关资源
最近更新 更多