在Django错误时显示外键的CharField值

0 投票
1 回答
1145 浏览
提问于 2025-04-15 19:48

假设我有一个模型,它里面有一个外键指向另一个模型。

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

我想到两种解决方案:

  1. ModelB 里的 model_a 字段设置为隐藏,使用 editable=false,然后在 ModelB 中添加一个 CharField 来存储用户输入的文本。这样在表单中显示这个字段,但用它的值来填充 model_a

  2. 使用自动完成字段,比如可以用 django-autocomplete。这样用户可以直接输入对象的名称,而不是使用下拉选择框。(不过如果没有JavaScript的话,就会退回到使用下拉选择框)。

撰写回答