在Django错误时显示外键的CharField值
假设我有一个模型,它里面有一个外键指向另一个模型。
class ModelA(models.Model):
field = models.CharField(max_length=100)
class ModelB(models.Model):
model_a = models.ForeignKey(ModelA)
然后我有这个表单:
class FormB(models.ModelForm):
model_a = forms.CharField(required=True)
def clean(self):
model_a = self.cleaned_data["model_a"]
try:
v = ModelA.objects.get(model_a=model_a)
self.cleaned_data["model_a"] = v
except Exception:
self._errors['model_a'] = ErrorList(["ModelA not found"])
return self.cleaned_data
现在,每当我在FormB中输入一个字符值时,它会在ModelA中搜索这个值,并返回干净的数据。
但是,当我用这个表单来列出已经存在的实例时,它显示的是ID,而不是具体的值。
def my_view(request):
instance = ModelB.objects.get()[0]
form = FormB(instance=instance)
return render_to_response("bla.html", {"form" : form})
有没有人知道我该如何在传递实例时,让这个字符字段显示具体的值?
谢谢,
Nico
1 个回答
0
我想到两种解决方案:
把
ModelB
里的model_a
字段设置为隐藏,使用editable=false
,然后在ModelB
中添加一个CharField
来存储用户输入的文本。这样在表单中显示这个字段,但用它的值来填充model_a
。使用自动完成字段,比如可以用 django-autocomplete。这样用户可以直接输入对象的名称,而不是使用下拉选择框。(不过如果没有JavaScript的话,就会退回到使用下拉选择框)。