在django管理中过滤下拉列表值 [英] filtering dropdown values in django admin
问题描述
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
这样的东西...
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...
这篇关于在django管理中过滤下拉列表值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!