在django管理中过滤下拉列表值 [英] filtering dropdown values in django admin

查看:771
本文介绍了在django管理中过滤下拉列表值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $。$。。。。。。。。。。。。。。。。。。。。。。。。 CharField(max_length = 100)
def __unicode __(self):
return self.title

class Bar(models.Model):
foo = models.ForeignKey Foo,related_name ='Foo_picks',unique = True)
added_on = models.DateTimeField(auto_now_add = True)

在Django admin add_view:

  def add_view(self,* args,** kwargs):
self.exclude =(added_on)
self.readonly_fields =()
return super(Bar,self).add_view(* args,** kwargs)

所以,管理员添加视图中的字段显示是 foo 哪个是一个下拉菜单列出并显示所有标题。 标题 Foo 保持为空或'。所以,下拉列表有很多空值,因为它的标题是空的。我想过滤掉这些空值。

解决方案

您可以为ModelAdmin提供自己的表单,并提供foo字段的自定义查询。从django导入表单

$ $ $ $ $ $ $ $ $ $ $ $ $ $ $

$ b $ c $具体的查询:
class CustomBarModelForm(forms.ModelForm):
class Meta:
model = Bar
fields ='__all__'

def __init __ self,* args,** kwargs):
super(CustomBarModelForm,self).__ init __(* args,** kwargs)
self.fields ['foo']。queryset = Foo.objects.filter (title__isnull = False)#或其他

#在你的modelAdmin中使用它
class BarAdmin(admin.ModelAdmin):
form = CustomBarModelForm

这样的东西...



do cs


class Foo(models.Model):
    title = models.TextField()
    userid = models.IntegerField()
    image = models.CharField(max_length=100)
    def __unicode__(self):
       return self.title

class Bar(models.Model):
    foo = models.ForeignKey(Foo, related_name='Foo_picks', unique=True)
    added_on = models.DateTimeField(auto_now_add=True)

In Django admin add_view:

def add_view(self, *args, **kwargs):
    self.exclude = ("added_on",)
    self.readonly_fields = ()
    return super(Bar, self).add_view(*args, **kwargs)

So, Field shows in the admin add view is foo Which is a drop down list and shows all the titles. Some title of Foo remains empty or ''. So, drop down list have lots of empty value because it title is empty. I want to filter out those empty values.

解决方案

You can provide your own form for ModelAdmin, with custom queryset for foo field.

from django import forms
from django.contrib import admin

#Create custom form with specific queryset:
class CustomBarModelForm(forms.ModelForm):
    class Meta:
        model = Bar
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super(CustomBarModelForm, self).__init__(*args, **kwargs)
        self.fields['foo'].queryset = Foo.objects.filter(title__isnull=False)# or something else

# Use it in your modelAdmin
class BarAdmin(admin.ModelAdmin):
    form = CustomBarModelForm

Something like this...

docs

这篇关于在django管理中过滤下拉列表值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆