【问题标题】:Django admin show __str__ value in nameDjango 管理员在名称中显示 __str__ 值
【发布时间】:2017-08-17 17:44:51
【问题描述】:

我有很多这样的字段:

class Retailer(models.Model):
    name = models.CharField(max_length=100, db_index=True)
    city_gps = models.ManyToManyField(City, blank=True, related_name='retailers', db_index=True)

    def __str__(self):
        retailer_city = ""
        if self.city_gps:
            retailer_city = self.city_gps.all().first().name

        return slugify(self.name) + slugify(retailer_city)

我希望管理员显示名称和所有相关城市的组合。但是,当我将管理员设置为像这样显示此字段时:

class RetailerAdmin(admin.ModelAdmin):
    search_fields = ['name']
    list_display = ['name', 'city_gps', 'icon_tag', 'logo_tag', 'header_tag']

我得到错误:

: (admin.E109) 的值 'list_display[1]' 不能是 ManyToManyField。

那么,我该如何解决呢?有没有办法在后台显示__str__方法的值?

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    the docs for list_display in Django中所说:

    ManyToManyField 字段不受支持,因为这需要为表中的每一行执行单独的 SQL 语句。如果您仍然想这样做,请给您的模型一个自定义方法,并将该方法的名称添加到list_display。 (有关list_display 中自定义方法的更多信息,请参阅下文。)

    所以您可以在您的models.py 或(我认为更多explicit 方式)中直接在您的admin.py 中定义此自定义方法

    class RetailerAdmin(admin.ModelAdmin):
        search_fields = ['name']
        list_display = ['name', 'icon_tag', 'logo_tag', 'header_tag', 'retailer_city']
    
        def retailer_city(self, obj):
            city_gps = obj.city_gps
            retailer_city = city_gps.all().first().name if city_gps else ''
    
            return slugify(obj.name) + slugify(retailer_city)
    

    注意retailer_city是在list_display中添加的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-20
      • 2010-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-10
      • 1970-01-01
      相关资源
      最近更新 更多