我需要一个可以只读取外键的小部件,并且它应该显示与该字段相关的值而不是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
答案 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/