Проблемы с формой - установка начального значения - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь установить начальное значение поля в форме. Поле не является частью модели, но когда я пытаюсь установить его значение, поле остается пустым. По моим исследованиям, это может быть связано с тем, что форма «связана», что имеет для меня какой-то смысл, но в этом случае поле не является частью модели.

Моя форма:

#Form for editing profile
class CatForm(forms.ModelForm):
    pictureid = forms.CharField()

    class Meta:
        model = Cat
        fields = ['name']

    def __init__(self, *args, **kwargs):
        picid = kwargs.pop("pictureid")
        print(picid)
        super(CatForm, self).__init__(*args, **kwargs)
        self.fields['pictureid'] = forms.CharField(initial=picid, required=False)

Модель:

class Cat(models.Model):
    name = models.CharField(max_length=34,null=False)

С точки зрения это называется так:

catform = CatForm(request.POST, pictureid=instance.id)

Я ожидал, что оно установит в поле значение исходного атрибута, но это не так. Я попытался проверить это, добавив строку, но не установил.

Вот что мне кажется:

class CatForm(forms.ModelForm):

    class Meta:
        model = Cat
        fields = ['name']

    def __init__(self, *args, **kwargs):
        picid = kwargs.pop("pictureid")
        super(CatForm, self).__init__(*args, **kwargs)
        self.fields['pictureid'] = forms.CharField(initial=picid)

Мне также нужно было исключить «request.POST» из вызова this при запуске формы.

1 Ответ

0 голосов
/ 19 июня 2019

Если вы хотите отобразить pictureid в запросе GET, то вы можете попробовать вот так:

catform = CatForm(initial={'pictureid': instance.id})

Для запроса GET вам не нужно переопределять метод __init__.

Но, если вы хотите использовать запрос Catform в POST , чтобы использовать значение pictureid где-то еще (скажем, в методе сохранения), вам потребуется переопределить __init__ метод здесь.

class CatForm(forms.ModelForm):
    pictureid = forms.CharField()

    class Meta:
        model = Cat
        fields = ['name']

    def __init__(self, *args, **kwargs):
        picid = kwargs.pop("pictureid")
        print(picid)
        super(CatForm, self).__init__(*args, **kwargs)
        self.pictureid = picid

    def save(self, *args, **kwargs):
        print(self.pictureid)  # if you want to use it in save method
        return super().save(*args, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...