我今天刚开始玩Django,到目前为止我发现做简单的事情相当困难。我现在正在努力的是过滤状态类型列表。 StatusTypes模型是:
class StatusTypes(models.Model):
status = models.CharField(max_length=50)
type = models.IntegerField()
def __unicode__(self):
return self.status
class Meta:
db_table = u'status_types'
在一个管理页面中,我需要所有结果,其中type = 0,而在另一个管理页面中,我需要所有结果,其中type = 1,所以我不能只在模型中限制它。我该怎么做呢?
编辑:我本来应该更清楚一点。我有一个模型“单元”,它具有StatusTypes的外键。模型如下:
class StatusTypes(models.Model):
status = models.CharField(max_length=50)
type = models.IntegerField()
def __unicode__(self):
return self.status
class Meta:
db_table = u'status_types'
class Unit(models.Model):
name = models.CharField(unique=True, max_length=50)
status = models.ForeignKey(StatusTypes, db_column='status')
note = models.TextField()
date_added = models.DateTimeField()
def __unicode__(self):
return self.name
class Meta:
db_table = u'units'
所以现在在单元模型的管理页面中,我想将状态限制为只有类型为1的那些。基于下面的lazerscience响应,我尝试了以下代码:
from inv.inventory.models import Unit
from django.contrib import admin
class UnitAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(UnitAdmin, self).queryset(request)
return qs.filter(type=0)
admin.site.register(Unit, UnitAdmin)
但是,它根本没有改变选择框。我也尝试打印qs的值,没有输出到我的终端,所以我想知道我是否需要一些如何调用queryset?
编辑2:我可能还不清楚我是否想要为单元模型的创建页面上的状态下拉列表进行过滤。
答案 0 :(得分:4)
编辑:
事实证明,在这种情况下,ModelAdmin.formfield_for_foreignkey是正确答案: http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey
以前的答案:
看看list_filter attribute of ModelAdmin。这听起来更像你想要的,因为它会创建一个很好的界面来过滤不同的标准,而不是任意限制你的查询集。
答案 1 :(得分:2)
您可以覆盖queryset
类的MyModelAdmin
方法:
from django.contrib import admin
class MyModelAdmin(admin.ModelAdmin):
def queryset(self, request):
qs = super(MyModelAdmin, self).queryset(request)
return qs.filter(type=0)
admin.site.register(StatusTypes, MyModelAdmin)
此管理员只会显示模型中包含type=0
!