2017-02-13 71 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

谢谢!我会尽力把这个代码。 –