在Djang中更新表单

2024-04-25 18:21:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型:用户和配置文件,我为它们创建了2个窗体类。在

表格

class UserProfileForm(ModelForm):   
    class Meta:
        model = Profile
        fields = ['dob','country']

class UserForm(ModelForm):
     class Meta:
        model = User
        fields = ['username','first_name','last_name','email','password']

我的个人资料模型

^{pr2}$

如何保存这些表单?在

forms.save()似乎没有帮助。在

视图

def profile(request):
    print(request.user)
    form1 = UserForm()
    form2  = UserProfileForm()
    if request.method == 'POST':
        if form1.is_valid() and form2.is_valid():
            form1.save()
            form2.save()
    return render(request,'account/profile.html',{'form1':form1, 'form2':form2})

Tags: name模型fieldsmodelifrequestsaveprofile
2条回答

您需要将数据传入表单,以便进行验证,并且在验证成功后保存模型。现在,form1.is_valid()form2.is_valid()总是返回False,而且您没有处理这种情况,所以页面只是重新呈现。在

def profile(request):
    print(request.user)
    form1 = forms.UserForm()
    form2 = forms.UserProfileForm()
    if request.method == 'POST':
        form1 = forms.UserForm(request.POST, request.FILES)
        form = forms.UserProfileForm(request.POST, request.FILES)
        if form1.is_valid() and form2.is_valid():
            form1.save()
            form2.save()
        else:
            return Http404 
    return render(request,'account/profile.html',{'form1':form1, 'form2':form2})

尝试此操作,因为您没有将任何数据保存到数据库:

from .models import Profile
from django.contrib.auth.models import User

def profile(request):
    print(request.user)

    if request.method == 'POST':
        form1 = UserForm(request.POST)
        form2  = UserProfileForm(request.POST)

        if form1.is_valid() and form2.is_valid():
            profile = Profile()
            user = User.objects.get(username=request.user)

            user.username = form1.cleaned_data['username']
            user.first_name = form1.cleaned_data['first_name']
            user.last_name = form1.cleaned_data['last_name']
            user.email = form1.cleaned_data['email']
            user.set_password(form1.cleaned_data['password'])
            user.save()

            profile.user = request.user # user field cannot be empty
            profile.dob = form2.cleaned_data['dob']
            profile.country = form2.cleaned_data['country']
            profile.save()
    else:
        form1 = UserForm()
        form2  = UserProfileForm() 

    context = {
       'form1' : form1,
       'form2' : form2
      }

    return render(request,'account/profile.html', context = context)

这是一种正确的方法,可以检查它是否是GETreturn empty form。但是我不确定你是否能同时保存profile和user,因为你的profile中有一个外键,它不能为空。你需要有一个预定义的用户。在

相关问题 更多 >