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

在Django Admin中过滤ManyToMany框

孙佑运
2023-03-14
问题内容

我有一个与另一个对象具有多对多关系的对象。
在Django Admin中,这会在多重选择框中产生很长的列表。

我想过滤掉ManyToMany关系,所以我只获取客户选择的城市中可用的类别。

这可能吗?我需要为其创建一个小部件吗?如果是这样,我该如何将行为从标准ManyToMany字段复制到该字段,因为我也希望filter_horizo​​ntal函数。

这些是我的简化模型:

class City(models.Model):
    name = models.CharField(max_length=200)


class Catehtml" target="_blank">gory(models.Model):
    name = models.CharField(max_length=200)
    available_in = models.ManyToManyField(City)


class Customer(models.Model):
    name = models.CharField(max_length=200)
    city = models.ForeignKey(City)

问题答案:

这是我使用上述类的解决方案。我添加了许多过滤器以正确过滤它,但我想在此处使代码可读。

这正是我一直在寻找的东西,我在这里找到了解决方案:http : //www.slideshare.net/lincolnloop/customizing-the-django-admin#stats-bottom(幻灯片50)

将以下内容添加到我的admin.py中:

class CustomerForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs):
        super(CustomerForm, self).__init__(*args, **kwargs)
        wtf = Category.objects.filter(pk=self.instance.cat_id);
        w = self.fields['categories'].widget
        choices = []
        for choice in wtf:
            choices.append((choice.id, choice.name))
        w.choices = choices


class CustomerAdmin(admin.ModelAdmin):
    list_per_page = 100
    ordering = ['submit_date',] # didnt have this one in the example, sorry
    search_fields = ['name', 'city',]
    filter_horizontal = ('categories',)
    form = CustomerForm

这将过滤“类别”列表,而不会删除任何功能!(即:我仍然可以拥有我心爱的filter_horizo​​ntal :))

ModelForms非常强大,令我感到惊讶的是它没有在文档/书中详细介绍。



 类似资料:
  • 问题内容: 我的应用程序中有2个过滤器。根据某些条件,我想选择是否执行第二个过滤器。有没有办法做到这一点? 我做了一些谷歌搜索,但没有成功。我希望请求继续执行而不执行第二个过滤器。那可能吗? 任何帮助将不胜感激。 问题答案: 您可以在请求中设置一个属性,然后在第二个过滤器中对其进行检查。 您可以像这样简化上面的代码: 这样,您只需检查属性“ executeSecondFilter”的存在

  • 问题内容: 我有一个类似下面的查询, 但是由于我的ID过滤器,我的构面未过滤。我得到了所有方面,但我希望通过上面的ID过滤器对其进行过滤。你有什么想法 ? 问题答案: 尽管您的工作可行,但更干净的解决方案是使用过滤查询。 http://www.elasticsearch.org/guide/reference/query-dsl/filtered- query/ 允许您使用原始查询+一些任意过滤器

  • 问题内容: 为什么以下查询不起作用?Mysql抱怨z-我不能在WHERE子句中使用别名吗? 我得到的错误是: 问题答案: http://dev.mysql.com/doc/refman/5.0/en/problems-with- alias.html 标准SQL不允许在WHERE子句中引用列别名。之所以施加此限制,是因为在评估WHERE子句时,可能尚未确定列值。例如,以下查询是非法的: 试试这个,

  • 问题内容: 我有这样的Book模型: 简而言之: 我想检索作者严格等于给定作者集的书籍。我不确定是否有单个查询可以执行此操作,但是任何建议都会有所帮助。 总而言之: 这是我尝试过的((无法运行得到AttributeError) …这就是我得到的: 总的来说,我应该如何像在我的案例中那样在其ManyToMany字段包含一组给定对象的约束下查询模型? ps:我发现了一些相关的SO问题,但找不到清晰的答

  • 下面的代码被修改为不包括我的数据库中的任何数据。 然后将其传递到initialize方法中,在该方法中进行表的实际填充。 顺便说一下,Users类如下所示: 该程序按预期工作,我可以看到与图像和VBox的详细信息的表格。 现在我想添加一个TextField来过滤表,过滤参数是标签中的文本。 我明白了,我需要将ObservableList放入FilteredList中,然后放入SortedList中

  • 问题内容: 我有以下情况: 我想做的是加载所有在书名中包含SQL的作者。即 看起来很简单。 然后,我想做的就是遍历作者并展示他们的书。我希望访问authors [0] .books时,它只会返回标题中带有“ SQL”的书籍。但是,我正在将所有书籍分配给该作者。当我访问该关系时,该过滤器将应用于作者列表,而不是其书籍。 如何构造查询,以便在按关系(即书籍)进行过滤时,当我访问该关系时,仍会应用该过滤