У меня есть следующая модель:
class Watchman(models.Model):
group = models.ForeignKey('groups.Group')
name = models.CharField(max_length=64)
И следующая форма модели:
class NewWatchmanForm(forms.ModelForm):
class Meta:
model = Watchman
fields = ['name']
В момент создания нового Сторожа я не знаю, какая group
оно принадлежит, следовательно, name
- единственное поле модели, определенное в NewWatchmanForm
. Однако, как только я выяснил правильный group
, к которому он принадлежит, я использую эту форму, чтобы обновить объект с соответствующим group
:
class UpdateWatchmanForm(NewWatchmanForm):
group = forms.ModelChoiceField(queryset=Group.objects.all())
class Meta(NewWatchmanForm.Meta):
fields = NewWatchmanForm.Meta.fields + ("group",)
Мне было бы любопытно, может ли быть лучший способ повторно использовать мой NewWatchmanForm
. В идеале я бы хотел избежать явного объявления group
, что-то вроде этого:
class UpdateWatchmanForm(NewWatchmanForm):
# group = forms.ModelChoiceField(queryset=Group.objects.all())
class Meta(NewWatchmanForm.Meta):
fields = NewWatchmanForm.Meta.fields + ("group",)
Однако, если я это сделаю, я получу эту ошибку:
fields = NewWatchmanForm.Meta.fields + ("group",)
TypeError: can only concatenate list (not "tuple") to list
Как правильно создать подкласс существующей ModelForm и включить поле ForeignKey (без переопределения forms.ModelChoiceField(...)
)?