2017-02-13 64 views
2

我一直在玩Django的管理頁面,並陷入困境,似乎無法在文檔中找到解決方案。我定義了三種不同的模型:位置,餐廳特色和員工。這三種模型都是相互關聯的。這個問題是特定於我的員工型號:在list_filter啓用後新建list_display Django 1.10

class Employee(models.Model): 
    restaurant = models.ForeignKey(RestaurantFeature, on_delete=models.CASCADE) 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    age = models.IntegerField() 
    address = models.CharField(max_length=80) 
    prior_experience = models.BooleanField(default=False) 
    hour_contract = models.IntegerField() 
    hourly_salary = models.FloatField() 

    def _get_full_name(self): 
     return '%s %s' % (self.first_name, self.last_name) 
    full_name = property(_get_full_name) 

    def __str__(self): 
     return "%s" % self.full_name 

    class Meta: 
     verbose_name_plural = "Employees" 

自定義管理佈局,我有:

class EmployeeAdmin(admin.ModelAdmin): 
    list_display = ('full_name','restaurant','prior_experience',) 
    list_filter = ('restaurant',) 
    search_fields = ('first_name', 'last_name',) 
admin.site.register(Employee, EmployeeAdmin) 

這個偉大的工程!定義的顯示器工作,過濾器也一樣。我想要的是:一旦啓用restaurant filter,新的list_display!這樣可以在需要時提供更詳細的信息。

如何定義新的list_display一旦list_filter被應用?

MORE CLEARER: list_display現在定義了全名,餐廳和以前的經驗。一旦餐廳過濾器被應用,我希望這些變量變成全名,餐廳,以前的經驗,小時合同和小時工資!例如,所有餐廳的所有員工都會顯示一些一般信息,但是一旦選擇了「麥當勞」,麥當勞員工就會獲得更詳細的信息。

+1

這個不清楚,恐怕。 「餐館過濾器啓用後,新的list_display」究竟是什麼意思?新的方式是什麼? –

+0

對不起。 'list_display'現在定義了全名,餐廳和以前的經驗。一旦餐廳過濾器被應用,我希望這些變量變成全名,餐廳,以前的經驗,小時合同和小時工資!例如,所有餐館的所有員工都會顯示一些常規信息,但是一旦選擇了「Mc Donalds」,則會爲Mc Donalds員工提供更詳細的信息。 –

回答

0

ModelAdmin類定義了一個將請求作爲參數的get_list_display() method。可以想象,您可以檢查request.GET以查看它是否包含任何過濾參數,然後從該方法返回不同的字段列表。

+0

謝謝!我會盡力把這個代碼。 –