gpt4 book ai didi

python - 如何将登录用户的用户名添加到 django 中的模型字段

转载 作者:行者123 更新时间:2023-12-02 19:37:11 28 4
gpt4 key购买 nike

如何将当前登录用户的用户名添加到我的模型中的字段中?例如,我需要在模型中存储有关用户的信息,例如姓名、电子邮件等,而不是默认的 Django 用户模型,但我仍然使用默认模型来存储凭据。我想在它们之间建立关系,所以我创建了 username我的模型中的字段。保存相应表格时如何填写当前用户的用户名?我的模型

class ApplicantProfile(models.Model):
name = models.CharField(max_length = 50)
dob = models.DateField()
email = models.EmailField()
description = models.TextField()
username = <something>

我该改变什么<something>与?

我的表格

class ApplicantProfileEdit(forms.ModelForm):
class Meta:
model = ApplicantProfile
fields = [
'name',
'dob',
'email',
'description',
]

我的看法

def ApplEditView(request):
form = ApplicantProfileEdit(request.POST or None)
if form.is_valid():
form.save()
form = ApplicantProfileEdit()
context = {
'form':form
}
return render(request, "applProfileEdit.html", context)

附注我尝试将模型直接导入到我的 views.py ,并分配 request.user.usernameusername在我看来,模型的字段,但它不起作用,只是将该字段留空。我有usernameCharField当我尝试这个时。

最佳答案

保存用户名本身并不是一个好主意,或者至少在没有 FOREIGN KEY 约束的情况下不是一个好主意。如果稍后用户更改了名称,则用户名现在指向不存在的用户,如果稍后另一个用户将其用户名更改为该用户名,则您的 ApplicantProfile 将指向错误的用户。

通常使用 ForeignKey field [Django-doc] ,或者如果每个 ApplicantProfile 指向不同的用户,则 OneToOneField [Django-doc] :

from django.conf import settings
from django.db import models

class ApplicantProfile(models.Model):
name = models.CharField(max_length = 50)
dob = models.DateField()
email = models.EmailField()
description = models.TextField()
# maybe a OneToOneField
<b>user</b> = models.<b>ForeignKey</b>(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)

在 View 中:

from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect

@login_required
def appl_edit_view(request):
if request.method == 'POST':
form = ApplicantProfileEdit(request.POST)
if form.is_valid():
<b>form.instance.user = request.user</b>
form.save()
<b>return redirect(<i>'some-view-name'</i>)</b>
else:
form = ApplicantProfileEdit()
context = {
'form':form
}
return render(request, 'applProfileEdit.html', context)

Note: In case of a successful POST request, you should make a redirect [Django-doc] to implement the Post/Redirect/Get pattern [wiki]. This avoids that you make the same POST request when the user refreshes the browser.

 

Note: You can limit views to a view to authenticated users with the @login_required decorator [Django-doc].

关于python - 如何将登录用户的用户名添加到 django 中的模型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60899426/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com