我有以下型号:
class Model(models.Model):
creator = models.ForeignKey(User,related_name='com_creator',on_delete=models.SET_NULL, blank=True, null=True)
username = models.CharField(max_length=60,default="")
created = models.DateTimeField(auto_now_add=True)
body = models.TextField(max_length=10000,default=" ")
subtype = models.CharField(_("SubType"),max_length=100)
typ = models.CharField(_("Type"),max_length=50)
plus = models.ManyToManyField(User,related_name='com_plus', verbose_name=_('Plus'), blank=True)
is_anonymous = models.BooleanField(_('Stay Anonymous'), blank=True, default=False)
typ和subtype中的值是代码,如下所示:“6_0_p”,(因为原始值长得离谱,所以我使用代码和一个dict来翻译成人类可读的形式)。
问:如何在django admin中截取这些值,并将其转换为人类可读的形式?
这是我目前为止尝试的:
class ModelAdmin(admin.ModelAdmin):
model = Model
extra = 1
exclude = ("username","creator","plus" )
readonly_fields = ('subtype','typ','is_anonymous','created')
fields = ('body','subtype','typ')
def typ(self, obj):
self.typ = "ppp"
obj.typ = "ppp"
return "pppp"
我试着返回对象,self,一些其他的值。我也试着不用一个可调用函数来设置这个值,只是声明“typ='xxx'"。什么都没有。我可能不明白整个事情是怎么工作的...
任何想法都将不胜感激。
3条答案
按热度按时间snvhrwxg1#
您需要创建一个对应于方法名的
readonly_field
,然后从该方法返回任何内容。文档位于:https://docs.djangoproject.com/en/1.11/ref/contrib/admin/#django.contrib.admin.ModelAdmin.readonly_fields
h43kikqp2#
我认为您的代码不起作用,因为方法名称与字段相同。
您必须更改字段的名称,如字段元组中的_typ,然后添加一个名为_typ的方法,该方法返回任何内容或一些obj属性。
即:
mwngjboj3#
在Django 4及以上版本中,您可以轻松添加自定义(只读)字段,如下所示:
您可以看到,字段也需要在
readonly_fields
和fieldsets
中。