【问题标题】:How to show Many-to-Many Field on Django Admin Panel?如何在 Django 管理面板上显示多对多字段?
【发布时间】:2021-06-20 20:55:54
【问题描述】:

我有 2 个模型,产品和标签。产品和标签之间的关系是多对多关系。

如何在 django 管理面板上显示“标签”字段?目前,当我使用下面的代码时,该值为 None

models.py

class Tag(models.Model):
  name = models.CharField(max_length=200, null=True)

  def __str__(self):
    return self.name

class Product(models.Model):
  CATEGORY = (
    ('Indoor','Indoor'),
    ('Outdoor','Outdoor'),
  )

  name = models.CharField(max_length=200, null=True)
  price = models.FloatField(null=True)
  category = models.CharField(max_length=200, choices=CATEGORY)
  description = models.CharField(max_length=200, null=True)
  date_created = models.DateTimeField(auto_now_add=True, null=True)
  tags = models.ManyToManyField(Tag)

admin.py

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
  list_display = ['id','name','price','category','tags']
  list_display_links = ['name']
  
  def tags(self):
    return self.tags.name

【问题讨论】:

标签: python django django-models django-admin


【解决方案1】:

试试这个

@admin.register(Product)
class ProductAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'price', 'category', 'get_tags']
    list_display_links = ['name']

    def get_tags(self, obj):
        if obj.tags.all():
            return list(obj.tags.all().values_list('name', flat=True))
        else:
            return 'NA'

参考这个https://docs.djangoproject.com/en/3.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display

【讨论】:

    【解决方案2】:
    @admin.register(Product)
    class ProductAdmin(admin.ModelAdmin):
      list_display = ['id','name','price','category','get_tags']
      list_display_links = ['name']
      
      def get_tags(self, instance):
        return [tag.name for tag in instance.tags.all()]
    

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 2017-02-01
      • 2020-07-17
      • 1970-01-01
      • 2015-10-07
      • 2022-11-08
      相关资源
      最近更新 更多