在django中,如何将模型与用户链接。我希望用户添加有关其公司网站和名称的信息

时间:2016-07-02 16:20:36

标签: python django django-models django-forms

我希望用户在登录后能够添加有关其公司的信息,包括网站,名称,徽标等。

我已经有了这个模型

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/')

我想要的是程序会自动检测当前登录的用户,并将用户字段设置为该用户。

我怎么能这样做?

3 个答案:

答案 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="")

然后您可以使用“个人资料”和“用户”获取他们的用户信息