Как заполнить поля формы значениями модели - PullRequest
1 голос
/ 24 июня 2019

Я пытаюсь заполнить свою форму данными из модели Хорошо. Я использую фильтр по идентификатору, чтобы получить определенные объекты. Мне нужно было переписать функцию инициализации, чтобы установить рабочий набор запросов, и это работает. Теперь мне нужно заполнить значения для других полей.

Это мои формы.py:

class GoodGet(forms.ModelForm):
    class Meta:
        model = Good_Get
        Size = forms.ModelChoiceField(queryset = Good.objects.all())
        Name = forms.CharField(widget = forms.TextInput(attrs = {'value': Good.objects.all()}))
        fields = '__all__'

    def __init__(self, *args, good_id1=None, **kwargs):
        super(forms.ModelForm, self).__init__(*args, **kwargs)
        if good_id1 is not None:
            obj = Good.objects.filter(id = good_id1)
            for good in obj:
                good_sizes = good.Size.all()
            self.fields['Size'].queryset = good_sizes

Мне нужно сделать что-то вроде этого:

    def __init__(self, *args, good_id1=None, **kwargs):
        super(forms.ModelForm, self).__init__(*args, **kwargs)
        if good_id1 is not None:
            obj = Good.objects.filter(id = good_id1)
  --->      self.Name = obj.Name    <---
            for good in obj:
                good_sizes = good.Size.all()
            self.fields['Size'].queryset = good_sizes

Итак, как мне заполнить значения других полей данными из модели Good?

Ответы [ 2 ]

0 голосов
/ 24 июня 2019
    def __init__(self, *args, good_id1=None, **kwargs):
        super(forms.ModelForm, self).__init__(*args, **kwargs)
        if good_id1 is not None:
            obj = Good.objects.filter(id = good_id1)
            self.fields['Name'].initial = Good.objects.get(id=good_id1)
            for good in obj:
                good_sizes = good.Size.all()
            self.fields['Size'].queryset = good_sizes

Это должно быть так в моем случае

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

Вы можете установить начальное значение:

def __init__(self, *args, good_id1=None, **kwargs):
    super(forms.ModelForm, self).__init__(*args, **kwargs)
    if good_id1 is not None:
        obj = Good.objects<b>.get(</b>id=good_id1<b>)</b>
        self.fields['Name']<b>.initial</b> = obj.Name
        self.fields['Size'].queryset = <b>obj.</b>Size.all()

Таким образом, мы используем Good.objects.get(..), чтобы получить объект Good, который соответствует данному идентификатору, и мы передаем атрибут Name этого объектав качестве значения .initial для этого поля.

Но если это только вопрос инициализации ModelForm значениями объекта, вы можете использовать instance= параметр [Django-doc] , например:

# construct a form with data from an instance
GoodGet(<b>instance=Good.objects.get(id=some_id)</b>)

При этом в вашей форме GoodGet есть некоторые странные части.Вероятно, лучше добавить суффикс Form, вы указываете поля в классе, а не в классе Meta, и использование { 'value': Good.object.all() } не имеет смысла, так как значение не может быть набором Good объектов.

class GoodGet<b>Form</b>(forms.ModelForm):
    Size = forms.ModelChoiceField(queryset=Good.objects.all())
    Name = forms.CharField(widget=forms.<b>TextInput()</b>}))
    class Meta:
        model = Good_Get
        fields = '__all__'

    # ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...