django - 如何将计算字段添加到 django admin inline

标签 django django-admin

我正在尝试将计算字段添加到 Django 管理内联中。考虑这组类:

models.py:

class MyGroup(models.Model):
  group_name = models.CharField()
  size = models.IntegerField()

class MyUser(models.Model):
  user_name = models.CharField()
  groups = models.ManyToMany(MyGroup, related_name="users", through=MyMembership)
    
class MyMembership(models.Model):
  group = models.ForeignKey(MyGroup)
  user = models.ForeignKey(MyUser)
  timestamp = models.DateTimeField(auto_add_now=True)

我想在内联中显示group.size字段。我认为以下代码可以工作(基于 this answer ):

admin.py:


class MyMembershipInline(admin.TabularInline):
  model = MyUser.groups.through
  fields = (
    "group",
    "timestamp",
    "size",
  )
  readonly_fields = (
    "timestamp",
    "size",
  )

  def size(self, instance):
    return instance.group.size

@admin.register(MyUser):
class MyUserAdmin(admin.ModelAdmin)
  fields = ("user_name",)
  inlines = (MyMembershipInline,)

但我收到以下错误:

Unknown field(s) (size) specified for MyMembership

有什么建议吗?

最佳答案

在寻找此问题的解决方案时,我在以下 URL 中找到了一个适合我的解决方案: https://www.boris.co/2013/04/computed-field-on-tabularinline.html

给出的例子是:

class StatsInline(admin.TabularInline):
    model = Stats
    fields = ('clicked', 'shown', 'avg')
    readonly_fields = ('avg',)
    verbose_name = 'Stats'
    verbose_name_plural = 'Stats'
    can_delete = False

    def avg(self, obj):
        return float(obj.clicked) / obj.shown if obj.shown else 0

需要在 fieldsreadonly_fields 属性中提供计算字段。

关于django - 如何将计算字段添加到 django admin inline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69211310/

相关文章:

mysql - Django bug - auto_now_add 字段为 Null

python - 在 Django 中使用类方法设置字段的默认值

python - Django 表单未显示在管理页面上

python - 使用关键字参数 'deletedata' pk' : 1 '{' delete/<int:id>/'] 反转 }' not found. 1 pattern(s) tried: ['

Django:如果可能的话,将 CharField 转换为 Integer

python - 如何提高Python脚本的内存效率

python - 如何使用 Bootstrap Modal 在 Django 中使用基于类的 View 删除对象?

django - 自定义 Django 管理界面

Django django-smart-select : get TemplateSyntaxError during adding of data in admin site

django - 在 django 管理面板中一次添加多条记录