Установить значение формы поля из вида - PullRequest
1 голос
/ 25 мая 2019

Как добавить значение поля вручную из вида?

model.py

class Connect(models.Model):
    username = models.CharField(max_length=255)
    password = models.CharField(max_length=255,null=True, blank=True)
    conft = models.TextField(null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return unicode(self.username)

form.py

class NacmForm(ModelForm):
    password = forms.CharField(widget=forms.PasswordInput,required = False)
    conft = forms.Textarea()
    class Meta:
        model = Connect
        fields = ['username', 'password','conft']

    labels = {'conft':_('Config'),}

view.py

class config_static(View):
    def post(self, request, *args, **kwargs):
        formm = NacmForm(request.POST or None)
        ipform = IpFormset(request.POST)
        userValue = formm['username'].value()
        passValue = formm['password'].value()

        if ipform.is_valid() and formm.is_valid():
            simpanForm = formm.save()

            for form in ipform:
                ipaddr = form.cleaned_data.get('ipaddr')
                vendor = form.cleaned_data.get('vendor')
                                .......
                                //some code//
                                .......          
                simpanIp = form.save(commit=False)
                simpanIp.connect_id = simpanForm
                simpanIp.save()
                simpanForm.save()

            .........
            //some code//

Я хочу установить значение "conft" вручную, например, как

configuration = "some config"
conft = configuration

я уже пробовал

configuration = "some config"
NacmForm(initial={'conft': configuration })

or

formm.fields['conft'].initial = configuration 

or

formm = NacmForm(request.POST, initial={"conft": configuration })

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

Connect.objects.create(conft=configuration)

сохранить в базу данных, но не в той же строке

Ответы [ 2 ]

0 голосов
/ 25 мая 2019

так что после поиска в Google, я просто добавляю эту строку

class config_static(View):
    def post(self, request, *args, **kwargs):
        formm = NacmForm(request.POST or None)
        ipform = IpFormset(request.POST)
        userValue = formm['username'].value()
        passValue = formm['password'].value()

        if ipform.is_valid() and formm.is_valid():
            # If both form is valid
            simpanForm = formm.save()

            for form in ipform:
                ipaddr = form.cleaned_data.get('ipaddr')
                vendor = form.cleaned_data.get('vendor')
                                .......
                                //some code//
                                .......    
                simpanForm.conft = "ip route configuration" #  i add this   
                simpanIp = form.save(commit=False)
                simpanIp.connect_id = simpanForm
                simpanIp.save()
                simpanForm.save()

            .........
            //some code//
0 голосов
/ 25 мая 2019

formm.cleaned_data возвращает словарь. Таким образом, вы можете добавить / обновить / удалить keys вручную. initial={} Это для целей рендеринга (который добавляет в HTML-формы initial значения value="something"). Насколько я понимаю, вы хотите изменить входящие данные, когда HTTP POST сделано. Попробуйте вот так.

class config_static(View):
    def post(self, request, *args, **kwargs):
        formm = NacmForm(request.POST or None)
        ipform = IpFormset(request.POST)
        userValue = formm['username'].value()
        passValue = formm['password'].value()

        if ipform.is_valid() and formm.is_valid():
            # If both form is valid
            formm.cleaned_data['conft'] = '<new_value>' # + this is added logic
            simpanForm = formm.save()

            for form in ipform:
                ipaddr = form.cleaned_data.get('ipaddr')
                vendor = form.cleaned_data.get('vendor')
                                .......
                                //some code//
                                .......          
                simpanIp = form.save(commit=False)
                simpanIp.connect_id = simpanForm
                simpanIp.save()
                simpanForm.save()

            .........
            //some code//

forms.py

class NacmForm(ModelForm):
    password = forms.CharField(widget=forms.PasswordInput,required = False)
    # conft = forms.Textarea()
    class Meta:
        model = Connect
        fields = ['username', 'password','conft']

    labels = {'conft':_('Config'),}

Надеюсь, это поможет вам.

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