Python (Django)无法更新自定义配置文件
所以我尝试在扩展更新中更新用户的信息,但是在我添加其他信息之前它起作用了,但是现在它不起作用了,我尝试过返回,但仍然没有任何结果 因此,它确实发送了帖子,但无法验证它 Html forms.pyPython (Django)无法更新自定义配置文件,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,所以我尝试在扩展更新中更新用户的信息,但是在我添加其他信息之前它起作用了,但是现在它不起作用了,我尝试过返回,但仍然没有任何结果 因此,它确实发送了帖子,但无法验证它 Html forms.py 您没有保存ExtendeDeduser对象 user.extendeduser.save() 1-第一次运行。/manage.py shell 2-在shell中运行所有更新用户命令,以验证错误是否存在。 3-如果没有错误,请发布./manage.py runserver的错误日志,这样我就能够更准确
您没有保存ExtendeDeduser对象
user.extendeduser.save()
1-第一次运行。/manage.py shell 2-在shell中运行所有更新用户命令,以验证错误是否存在。
3-如果没有错误,请发布./manage.py runserver的错误日志,这样我就能够更准确地回答您的问题。所以我遗漏了一件事,那就是我在模型中使用了很多外键,没有看到有一个名为modelcooicefield和modelmultipleechoicefield的字段,它不起作用。所以我基本上改变了我的形式,然后它就成功了 Form.py
“@wm3ndez是的,这是我这边的一个小姐addin,但是我写的东西,一旦按下Submit,它就不会作为一个post请求,也不需要我在models应用程序中添加的东西,所以一旦用户模型更新,extendeduser模型就会自动保存到,但我写的东西,一旦按下Submits,它就不会作为post请求,所以它会结束它,但它无法验证表单。如果表单无效,您应该显示错误,而不是重定向到另一个页面并隐藏它们。即使我这样做了,删除所有返回,它仍然不会给出结果“什么意思?现在代码是什么样子的?您看到了什么?为什么你不能使用文档化的模式来处理表单的视图呢?它也会出现在帖子中,但是帖子不能被验证。我刚刚找到了为什么?
@login_required
def userprofileupdate(request, user_pk):
if request.method == 'POST':
form = UpdateProfileForm(request.POST, instance=request.user)
if form.is_valid():
user = form.save()
user.refresh_from_db() # load the profile instance created by the signal
user.extendeduser.nickname = form.cleaned_data.get('username')
user.extendeduser.postal_code = form.cleaned_data.get('postal_code')
user.extendeduser.phone_number = form.cleaned_data.get('phone_number')
user.extendeduser.emergency_number = form.cleaned_data.get('emergency_number')
user.extendeduser.birthdate = form.cleaned_data.get('birthdate')
user.extendeduser.languages = form.cleaned_data.get('languages')
user.extendeduser.drivers_licence = form.cleaned_data.get('drivers_licence')
user.extendeduser.tshirt = form.cleaned_data.get('tshirt')
user.extendeduser.special_considerations = form.cleaned_data.get('special_considerations')
user.save()
messages.success(request, "Your profile has been updated!")
return redirect('usersettings', user_pk=request.user.pk)
messages.error(request, 'Error: please update your settings if you want to update them')
return redirect('usersettings', user_pk=request.user.pk)
class UpdateProfileForm(forms.ModelForm):
postal_code = forms.CharField(max_length=10, required=True)
phone_number = forms.CharField(max_length=16, required=True)
emergency_number = forms.CharField(max_length=16, required=True)
birthdate = forms.DateField(required=False)
languages = forms.MultipleChoiceField(required=False)
drivers_licence = forms.MultipleChoiceField(required=False)
tshirt = forms.ChoiceField(required=False)
special_considerations = forms.CharField(required=False)
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'birthdate', 'phone_number', 'emergency_number', 'postal_code', 'languages', 'drivers_licence', 'tshirt', 'special_considerations',)
user.extendeduser.save()
from django.forms import ModelChoiceField, ModelMultipleChoiceField
class TshirtChoiceField(ModelChoiceField):
def label_from_instance(self, obj):
return obj.description
class DriversLicenceCategoriesMultipleChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.category
class LanguageMultipleChoiceField(ModelMultipleChoiceField):
def label_from_instance(self, obj):
return obj.name
class UpdateProfileForm(forms.ModelForm):
birthdate = forms.DateField(input_formats=['%d-%m-%Y'],required=False)
phone_number = forms.CharField(max_length=16, required=True)
emergency_number = forms.CharField(max_length=16, required=False)
postal_code = forms.CharField(max_length=10, required=True)
languages = LanguageMultipleChoiceField(queryset=Language.objects.all(),required=False)
drivers_licence = DriversLicenceCategoriesMultipleChoiceField(queryset=DriversLicenceCategories.objects.all(),required=False)
tshirt = TshirtChoiceField(queryset=TShirt.objects.all(),required=False)
special_considerations = forms.CharField(required=False)
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'birthdate', 'phone_number', 'emergency_number', 'postal_code', 'languages', 'drivers_licence', 'tshirt', 'special_considerations',)