在错误中显示django中外键的Charfield中的值

时间:2010-02-27 20:24:47

标签: python django forms foreign-keys

假设我有一个模型,它有一个外键给另一个。

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中显示值吗?

谢谢, 尼科

1 个答案:

答案 0 :(得分:0)

我可以想到两个选择:

  1. 使用model_a隐藏ModelB上的editable=false字段,并将CharField添加到ModelB以存储用户输入的文字。然后在表单中显示此字段,但使用其值填充model_a

  2. 使用自动填充字段,例如使用django-autocomplete。这允许用户键入对象的名称,而不是使用select小部件。 (但是在没有JavaScript的情况下回退到select。)