从视图设置字段表单值

时间:2019-05-25 10:00:55

标签: django python-3.x sqlite

如何从视图中手动添加字段值?

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 :(得分:0)

formm.cleaned_data返回字典。因此,您可以手动添加/更新/删除keysinitial={}这是出于渲染目的(其中以html形式添加initialvalue="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'),}

希望,对您有帮助。

答案 1 :(得分:0)

所以在谷歌搜索后,我只需添加这一行

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//