首页 > 解决方案 > Django - 使用 TextInput 表单查找 ForeignKey

问题描述

我目前正在尝试在 Django 中构建一个应用程序,用户应该能够在其中为模型创建新条目。所述模型包含与不同模型的 ForeignKey 关系。但是,经典的下拉表单字段并不实用,因为可能有数百个条目可供选择。相反,我想让用户简单地输入条目的名称(所有名称都是唯一的),然后在按下提交按钮时将其转换为相应的 ID。

我觉得这应该很简单,但由于我是 Django 新手,我很难弄清楚如何去做。目前的问题是,由于 ForeignKey 不存在(因为用户输入了名称而不是数据库条目的 ID),表单字段被声明为无效。

代码示例:

forms.py

class DogForm(ModelForm):

    class Meta:
        model = Dog
        fields = "__all__"
        widgets = {" shelter": widgets.TextInput(attrs={"id":" shelter", "placeholder":" Dog Shelter"}),
        "name": widgets.TextInput({"id":"name", "placeholder":"Name"}),

def clean(self):
        
        shelter= self.data.get("shelter")
        self.cleaned_data["shelter"] = Shelter.objects.get(name=shelter)
        return self.cleaned_data

views.py

class DogCreate(CreateView):
    model = Dog
    form_class = DogForm

    def form_valid(self, form):
        if form.is_valid():
            instance = form.save(commit=False)
            instance.save()
            return super(DogCreate, self).form_valid(form)   

如您所见,我的想法是clean通过添加正确的方法来覆盖该方法Shelterself.cleaned_data基于用户放入 TextInputField 的名称)。但这似乎不起作用,因为当按下提交时,表单仍然被声明为无效。

标签: pythondjango

解决方案


推荐阅读