Django 如何自动将用户保存在 Django 表单中?
Django how to automatically save user in a Django Form?
当我将“用户”字段传递到我的模型表单时。我将所有用户详细信息作为下拉列表。看图:
我试图在不显示此下拉列表的情况下保存当前用户实例,因为我希望用户在不选择或显示此下拉列表的情况下自动保存。
这是我的 forms.py 文件:
class ProfileFroms(forms.ModelForm):
class Meta:
model = UserProfile
fields = ["user","profile_pic","mobile","country","website_link"]
当我从字段中删除“用户”时出现此错误:
"NOT NULL constraint failed: members_userprofile.user_id"
我也试过这个代码来保存当前用户,但它给我带来了同样的错误。
views.py
if forms.is_valid():
forms.user = request.user
这是我的完整代码:
models.py
class UserManagement(AbstractUser):
is_subscriber = models.BooleanField(default=False)
is_customer = models.BooleanField(default=False)
class UserProfile(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,related_name="userprofile")
profile_pic = models.ImageField(upload_to='profile/images/',validators=[validate_file_size,FileExtensionValidator( ['png','jpg'] )],blank=True,null=True)
mobile = models.IntegerField(blank=True,null=True)
country = models.CharField(max_length=200,blank=True,null=True)
website_link = models.CharField(max_length=3000,blank=True,null=True)
views.py
def UserProfileView(request):
userinfo = UserManagement.objects.filter(username=request.user)
forms = ProfileFroms(request.POST,request.FILES or None)
if request.method == "POST":
if forms.is_valid():
#forms.user = request.user #tried this line for save current user but didn't work
forms.save()
messages.add_message(request, messages.INFO,'Profile updated sucessfully')
return redirect("members:user-profile-private")
else:
messages.add_message(request, messages.INFO,'Somethings wrong. Profile not updated')
print("invalid")
context={"userinfo":userinfo,"forms":forms}
return render(request,"members/privateprofile.html",context)
从表单中删除 user
字段:
class ProfileFroms(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['profile_pic', 'mobile', 'country', 'website_link']
然后您更改表单的 .instance
(而不是表单本身),因此:
if forms.is_valid():
forms<strong>.instance.user = request.user</strong>
forms.save()
当我将“用户”字段传递到我的模型表单时。我将所有用户详细信息作为下拉列表。看图:
我试图在不显示此下拉列表的情况下保存当前用户实例,因为我希望用户在不选择或显示此下拉列表的情况下自动保存。
这是我的 forms.py 文件:
class ProfileFroms(forms.ModelForm):
class Meta:
model = UserProfile
fields = ["user","profile_pic","mobile","country","website_link"]
当我从字段中删除“用户”时出现此错误:
"NOT NULL constraint failed: members_userprofile.user_id"
我也试过这个代码来保存当前用户,但它给我带来了同样的错误。
views.py
if forms.is_valid():
forms.user = request.user
这是我的完整代码:
models.py
class UserManagement(AbstractUser):
is_subscriber = models.BooleanField(default=False)
is_customer = models.BooleanField(default=False)
class UserProfile(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,related_name="userprofile")
profile_pic = models.ImageField(upload_to='profile/images/',validators=[validate_file_size,FileExtensionValidator( ['png','jpg'] )],blank=True,null=True)
mobile = models.IntegerField(blank=True,null=True)
country = models.CharField(max_length=200,blank=True,null=True)
website_link = models.CharField(max_length=3000,blank=True,null=True)
views.py
def UserProfileView(request):
userinfo = UserManagement.objects.filter(username=request.user)
forms = ProfileFroms(request.POST,request.FILES or None)
if request.method == "POST":
if forms.is_valid():
#forms.user = request.user #tried this line for save current user but didn't work
forms.save()
messages.add_message(request, messages.INFO,'Profile updated sucessfully')
return redirect("members:user-profile-private")
else:
messages.add_message(request, messages.INFO,'Somethings wrong. Profile not updated')
print("invalid")
context={"userinfo":userinfo,"forms":forms}
return render(request,"members/privateprofile.html",context)
从表单中删除 user
字段:
class ProfileFroms(forms.ModelForm):
class Meta:
model = UserProfile
fields = ['profile_pic', 'mobile', 'country', 'website_link']
然后您更改表单的 .instance
(而不是表单本身),因此:
if forms.is_valid():
forms<strong>.instance.user = request.user</strong>
forms.save()