在 django-forms 中编辑外键

Editing foreign keys in django-forms

我最近接触了 django 和 django 表单。

我想做的是创建一个可以编辑外键的表单。 (我的外键在表单中引用的其他模型的一种形式)。

假设我有这些模型

class Model2(models.Model):
    name = models.CharField(max_length=50)

class Model1(models.Model):
    type = models.ForeignKey(Model2, on_delete=models.CASCADE)
    value = models.CharField(max_length=50)
    # other fields

当您呈现 Model1 的表单时,外键也必须是可编辑的。

我想知道这样的事情是否可行

最简单的方法是在您的表单中进行一些自定义处理 - 可能有更好的方法,但我会这样做:

在forms.py

class Model1Form(forms.ModelForm):
    type = forms.CharField(label='Name')

    class Meta:
        model = Model1
        fields = ['value', 'type']

    def save(self, commit=True):
        obj, created = Model2.objects.get_or_create(
            name=self.cleaned_data['type']
        )
        self.cleaned_data['type'] = obj.id
        return super().save(commit)

另请注意,您不应使用 type 作为变量名。

您还可以对 Model1type 字段使用 ModelChoiceField

class Model1Form(forms.ModelForm):
    type = forms.ModelChoiceField(queryset=Model2.objects.all())

    class Meta:
        model = Model1
        field = '__all__'

这将为您提供 Model2 个要用作外键的对象的选择。