django - Django 如何在 Django 表单中自动保存用户?
问题描述
当我将“用户”字段传递给我的模型表单时。我将所有用户详细信息作为下拉列表。看图片:
我正在尝试保存当前用户实例而不显示此下拉列表,因为我希望用户将自动保存而不选择或显示此下拉列表。
这是我的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"
我还尝试了此代码来保存当前用户,但它让我遇到了同样的错误。
视图.py
if forms.is_valid():
forms.user = request.user
这是我的完整代码:
模型.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)
视图.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.instance.user = request.user
forms.save()
推荐阅读
- html - 如何在元素背景的一部分上显示工具提示?
- serilog - 如何捕获和记录启动错误
- aws-lambda - 在 stepfunctions 中捕获错误时向 sqs 发送消息
- firebase - PWA、Firebase 和 Google 登录:无法处理请求
- c# - WebRequest 上不允许使用错误 405 方法
- git - 可以将我的程序的“旧”版本保留在分支中吗?
- r - 如何通过闪亮的应用程序更新 Rstudio 全局环境中的数据库连接
- c++ - 调整时间复杂度 - 使用动态数组进行链式哈希
- postgresql - How can I store massive amounts of text in PostgreSQL?
- github - git push origin master 和 git push origin main 的区别