2015-10-23 129 views
1

我正在學習如何使用Django 1.8管理站點。我已經創建了下面的模型和模型管理類:Django管理員表單自定義選擇

#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',) 

的問題是,我的管理形式,包含汽車表中的所有數據,但我想只顯示與所有者不空行。我怎樣才能做到這一點?

回答

1

您可以覆蓋模型管理類的get_queryset方法。

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) 

注意它可能不是一個好主意,改變這樣的查詢集 - 如果你需要再添加一個所有者,您將無法訪問這些汽車的管理。

1

ModelAdmin類有一個.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) 
+0

這對我有效,但我不得不向get_queryset方法添加請求。謝謝! – GoobyPrs