django admin中的小部件

时间:2010-01-19 10:19:27

标签: django django-admin

我需要一个可以只读取外键的小部件,并且它应该显示与该字段相关的值而不是id

假设

Class A(models.Model):
   id=models.AutoField(primary_key=True)
   name=models.CharField(max_length=200)

   def __unicode__(self):
     return self.name

Class B(models.Model):

   id=models.AutoField(primary_key=True)
   name=models.ForeignKey(A)
   description=models.CharField(max_length=200)

现在,当我将B类的'name'作为readonly然后在admin中时,它只在Class A中显示该名称的id对应值。是否有任何widget可以使该字段为readonly并且还显示价值不是id

3 个答案:

答案 0 :(得分:0)

作为一种解决方法,您可以:

1)将字段name添加到ModelAdmin的raw_id_fields属性,然后

2)使用javascript禁用id输入框(保留值标签)。

除了安全问题(如果某人模仿已禁用/已删除的输入框),它将执行您要询问的内容。这可以另外处理,例如在从clean_name继承的类的ModelForm函数中处理。

答案 1 :(得分:0)

如果我在help_text.Means中显示值,该怎么显示help_text中的值以及Id

这可以简单地实现

def get_form(self, request, obj=None):
    form = super(BAdmin,self).get_form(request, obj)
    link = obj.id
    pl=A.objects.get(id=obj.name_id)
    help_text1 = "%s"%(pl.name)
    form.base_fields['name'].help_text = help_text1
    return form

答案 2 :(得分:0)

第三种解决方法是使用Django trunk,它将readonly_fields属性添加到ModelAdmin。 另一种方法是使用此补丁修补当前版本的django:http://code.djangoproject.com/ticket/342

编辑:我正在使用django r12204,因为后来的版本打破了django-cms应用程序,这对我来说至关重要。我认为django的后续版本有这个,但我必须修补我的django安装以显示外键值而不是id。但似乎这种行为仍然存在于django trunk中,所以这里是补丁:http://dpaste.com/hold/147814/

相关问题