Редактирование внешних ключей в 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
объектов, которые будут использоваться в качестве внешнего ключа.