Редактирование внешних ключей в django-формах

Недавно я занялся django и django forms.

Я пытаюсь сделать форму, в которой мой внешний ключ можно редактировать. (форма другой модели, на которую ссылается мой внешний ключ внутри формы).

Итак, допустим, у меня есть эти модели

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 в качестве имени переменной.

Вы также можете использовать ModelChoiceField для Model1 поля type:

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

    class Meta:
        model = Model1
        field = '__all__'

Это даст вам выбор Model2 объектов, которые будут использоваться в качестве внешнего ключа.

Вернуться на верх