假设我有一个模型,它有一个外键给另一个。
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中输入char值时,它都会在ModelA中搜索它 返回已清理的数据。
当我使用表单列出预先存在的实例时,它会显示ID而不是值。
def my_view(request):
instance = ModelB.objects.get()[0]
form = FormB(instance=instance)
return render_to_response("bla.html", {"form" : form})
当我传递实例时,有人知道如何在CharField中显示值吗?
谢谢, 尼科
答案 0 :(得分:0)
我可以想到两个选择:
使用model_a
隐藏ModelB
上的editable=false
字段,并将CharField
添加到ModelB
以存储用户输入的文字。然后在表单中显示此字段,但使用其值填充model_a
。
使用自动填充字段,例如使用django-autocomplete。这允许用户键入对象的名称,而不是使用select
小部件。 (但是在没有JavaScript的情况下回退到select
。)