Расширение ModelForm с помощью поля ForeignKey, которое ранее было исключено - PullRequest
0 голосов
/ 29 марта 2020

У меня есть следующая модель:

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(...))?

1 Ответ

0 голосов
/ 29 марта 2020

Я должен был попытаться прочитать ошибку: |

Проблема заключалась в том, что я пытался объединить список с кортежем. Оказывается, что удаление поля group в подклассе работает просто отлично:

class UpdateWatchmanForm(NewWatchmanForm):
    class Meta(NewWatchmanForm.Meta):
        # Extend list with a list, not a tuple!
        fields = NewWatchmanForm.Meta.fields + ["group"]
...