2017-12-27 245 views
0

我有這個model.py:Django管理list_display模型方法

class Topping(models.Model): 
    name = models.CharField(max_length=32) 

    def __str__(self): 
     return self.name 

class Base(models.Model): 
    name = models.CharField(max_length=32) 
    slug = models.SlugField(primary_key=True) 


class Advanced(models.Model): 
    toppings = models.ManyToManyField(Topping) 


class Mymodel(Base, Advanced): 
    ... 

    def toppings_list(self): 
     list_top = Advanced.toppings 
     return list_top 

我想說明的配料列表中(最好是格式化的,所以只打頂模型領域name列表)在我的管理,所以:

class MymodelAdmin(admin.ModelAdmin): 
    #list_display = (..., model.Mymodel.toppings_list(), ...) #Error: missing 1 required positional argument: 'self' 
    #list_display = (..., model.Mymodel.toppings_list(self), ...) #Error: self is not definited 
    list_display = (..., model.Mymodel.toppings_list, ...) #Gibberish: <django.db.models.fields.related_descriptors.ManyToManyDescriptor object at 0x0387FFD0> 

只有最後一個工作,但沒有提供任何有用的東西。

我想這太(我想格式化列表前顯示):再次

class MymodelAdmin(admin.ModelAdmin): 
    mylist=model.Mymodel.toppings_list #I don't change nothing for now 
    #mylist=[t for t in model.Mymodel.toppings_list] #Error: 'function' object is not iterable 
    list_display = ('mylist') #core.Topping.None 

,最後一個工作,但沒有給出任何有用的(也摘心不無)

謝謝

回答

1

您只是使用方法的名稱作爲字符串。

list_display = ("toppings_list", ...) 

不過請注意,您的toppings_list方法本身就是絕對沒有任何意義。你需要返回都與當前對象,而不是一個字段對象的澆頭,你需要再格式化爲一個字符串。

def toppings_list(self): 
    return ", ".join(self.toppings.values_list("name", flat=True))