我希望用户在登录后能够添加有关其公司的信息,包括网站,名称,徽标等。
我已经有了这个模型
user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1, unique=True)
comp_name = models.CharField(max_length=120,default='', blank=True)
comp_site = models.URLField(default='', blank=True)
comp_logo = models.ImageField(default='', blank=True, upload_to='img/logos/')
在我的views.py中我有这个:
if form1.is_valid():
saveInfo = form1.save(commit=False)
comp_name = form1.cleaned_data.get("comp_name")
comp_site = form1.cleaned_data.get("comp_site")
comp_logo = form1.cleaned_data.get("comp_logo")
saveInfo.user = form1.user
saveInfo.save()
return redirect('/profil/')
我想要的是程序会自动检测当前登录的用户,并将用户字段设置为该用户。
我怎么能这样做?
答案 0 :(得分:0)
if form1.is_valid():
saveInfo = form1.save(commit=False)
comp_name = form1.cleaned_data.get("comp_name")
comp_site = form1.cleaned_data.get("comp_site")
comp_logo = form1.cleaned_data.get("comp_logo")
saveInfo.user = request.user #<--- the authenticated user bound to the current request
saveInfo.save()
return redirect('/profil/')
request.user
是绑定到当前请求的当前用户。你必须(可能你已经做过)检查用户是否经过身份验证等。
答案 1 :(得分:0)
与任何Django一起发送的request
属性指定当前用户。
def myview(request):
current_user = request.user
您可以使用request.user.is_authenticated()
方法检查用户是否已登录。我在这里要做的是将登录视图重定向到您的表单视图。如果您在表单视图中使用@login_required
,则会自动执行此操作。
另外,如果您要扩展用户模型,则应使用OneToOneField
而不是ForiegnKey
。仅当每个用户可以拥有多家公司时才使用ForiegnKey
。
答案 2 :(得分:0)
您可以使用如下所示的一对一字段将用户关联到模型
from django.contrib.auth.models import User
class Profile(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
bio = models.TextField()
organisation = models.CharField(max_length=300, default="")
country = models.CharField(max_length=50, default="")
display_pic = models.ImageField(upload_to="authors/profile", default="")
然后您可以使用“个人资料”和“用户”获取他们的用户信息