【问题标题】:django vanilla view set field after form submit表单提交后的django vanilla视图设置字段
【发布时间】:2014-09-01 15:22:59
【问题描述】:

我有一个模型,并且正在使用 vanilla 视图来创建 Create、Update、Detail 和 Delete 视图。

class Person( models.Model ):
    username = models.CharField( max_length=30, unique=True )
    first_name = models.CharField( max_length=30 )
    middle_initial = models.CharField( max_length=3, null=True, blank=True )
    last_name = models.CharField( max_length=30 )
    last_four_ssn = models.CharField( max_length="5" )
    ssn = models.CharField(  max_length="13", verbose_name='SSN', blank=False )

我想做的是创建一个没有“last_four_ssn”的表单,然后在提交(并验证)表单时,我想将 last_four_ssn 设置为 ssn 中的最后四个数字。

class PersonCreate(PersonCRUDView, CreateView):
    fields = ['username', 'first_name', 'middle_initial', 'last_name',
          'ssn', 'email', 'years_of_service', 'birth_date',
          'address', 'city', 'state', 'zip_code']

    def form_valid(self, form):
        form.cleaned_data['ssn_last_four'] = form.cleaned_data['ssn'][-4:] 
        return super(PersonCreate, self).form_valid(form)

但它似乎不起作用。

如何保存 ssn_last_four?

【问题讨论】:

  • 我承认我一定错过了一些愚蠢的东西。谷歌了一遍,不知道如何设置。

标签: django django-forms django-views


【解决方案1】:

我一般用post方式,像这样:

forms.py

from .models import Person

PersonForm(forms.ModelForm):

model = Person

fields = ['username', 'first_name', 'middle_initial', 'last_name',
          'ssn', 'email', 'years_of_service', 'birth_date',
          'address', 'city', 'state', 'zip_code']

查看 从 django.http 导入 HttpResponse

from .forms import PersonForm

class PersonCreate(PersonCRUDView, CreateView):

    form_class = PersonForm

    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST)
        if form.is_valid():
            submited_form = form.save(commit=False)
            submited_form.ssn_last_four = form.cleaned_data['ssn'][-4:]
            submited_form.save()
            # return an HTTPResponse here, example:
            return HttpResponse("Saved!")

如果要使用form_valid方法:

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.ssn_last_four = form.cleaned_data['ssn'][-4:]
        self.object.save()
        return super(ModelFormMixin, self).form_valid(form)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多