Django 管理表单自定义 select

Django admin form custom select

我正在学习如何使用 Django 1.8 管理站点。我创建了以下模型和模型管理员 类:

#models.py
class Car(models.Model):
    manufacturer = models.CharField(max_length=200)
    model = models.CharField(max_length=200)
    owner = models.CharField(max_length=200, null=True)

#admin.py
class CarAdmin(admin.ModelAdmin):
    list_display = ('manufacturer', 'model')
    exclude = ('owner',)  

问题是我的管理表单包含来自 Car table 的所有数据,但我只想显示所有者不为空的行。我怎样才能做到这一点?

ModelAdmin class 有一个 .get_queryset() 方法,您可以尝试编写自己的查询集:

#admin.py
class CarAdmin(admin.ModelAdmin):
    list_display = ('manufacturer', 'model')
    exclude = ('owner')

    def get_queryset(self, request):
        return Car.objects.exclude(owner=None)

您可以覆盖模型管理的 get_queryset 方法 class。

class CarAdmin(admin.ModelAdmin):
    list_display = ('manufacturer', 'model')
    exclude = ('owner',)  # note you need a comma to make this a tuple

    def get_queryset(self, request):
        qs = super(MyModelAdmin, self).get_queryset(request)
        return qs.objects.filter(owner__isnull=False)

请注意,像这样更改查询集可能不是一个好主意——如果您以后需要添加所有者,您将无法在管理员中访问这些汽车。