标签: django-users

使用Django中的自定义字段扩展用户模型

使用自定义字段扩展User模型(与Django的身份验证应用程序捆绑在一起)的最佳方法是什么?我也可能希望使用该电子邮件作为用户名(用于身份验证).

我已经看到了一些 方法,但无法决定哪一个是最好的.

django django-models django-authentication django-users

415
推荐指数
10
解决办法
20万
查看次数

request.user返回一个SimpleLazyObject,我如何"唤醒"它?

我有以下方法:

def _attempt(actor):
    if actor.__class__ != User:
        raise TypeError
Run Code Online (Sandbox Code Playgroud)

从视图中调用:

self.object.attempt(self.request.user)
Run Code Online (Sandbox Code Playgroud)

如您所见,_attempt方法期望actor是类型django.contrib.auth.models.User,但是对象看起来是类型django.utils.functional.SimpleLazyObject.为什么会这样?更重要的是,如何将LazyObject(显然是一种User对象的包装器)转换为User对象?

有关详细信息,Request.user请访问:https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.user此文档似乎表明request.user应该是一个User对象......

======进行后期编辑=====

我现在有以下方法:

def _attempt(obj, action, actor, msg): 
    actor.is_authenticated() 
    if isinstance(actor, LazyObject): 
        print type(actor) 
Run Code Online (Sandbox Code Playgroud)

我正在传递一个用户,但if条件仍然是真的,演员仍然是LazyObject.为什么会这样?

python django django-contrib django-users

56
推荐指数
3
解决办法
2万
查看次数

如何在Django 1.5中使用'User'作为外键

我制作了一个自定义配置文件模型,如下所示:

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.ForeignKey('User', unique=True)
    name = models.CharField(max_length=30)
    occupation = models.CharField(max_length=50)
    city = models.CharField(max_length=30)
    province = models.CharField(max_length=50)
    sex = models.CharField(max_length=1)
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时manage.py syncdb,我得到:

myapp.userprofile:'user'与模型User有关系,它没有安装或者是抽象的.

我也尝试过:

from django.contrib.auth.models import BaseUserManager, AbstractUser
Run Code Online (Sandbox Code Playgroud)

但它给出了同样的错误.哪里我错了,如何解决这个问题?

python django django-users

50
推荐指数
2
解决办法
5万
查看次数

如何在Django CRUD中自定义auth.User Admin页面?

我只想在Django CRUD管理站点的用户列表中添加订阅日期.我怎样才能做到这一点 ?

谢谢您的帮助

python django django-admin django-users

46
推荐指数
2
解决办法
2万
查看次数

Django:如果用户不是超级用户,则隐藏模板中的按钮

如何让您的模板/视图识别登录用户是否是超级用户?

我的表单(在模板中)有一些按钮,如果用户不是超级用户,我想要完全隐藏

你会怎么做呢?

django django-templates django-models django-forms django-users

36
推荐指数
2
解决办法
4万
查看次数

以Django Form获取当前用户

可能重复:
以Django格式获取请求数据

我的访客模型的一部分:

class Guest(models.Model):
    event = models.ForeignKey(Event, related_name='guests')
    user = models.ForeignKey(User, unique=True, related_name='guests')
    ...
Run Code Online (Sandbox Code Playgroud)

表格以获得来宾的回复:

class RSVPForm(forms.Form):
    attending_d= forms.ChoiceField(choices=VISIBLE_ATTENDING_CHOICES, initial='yes', widget=forms.RadioSelect)
    attending_b = forms.ChoiceField(choices=VISIBLE_ATTENDING_CHOICES, initial='yes', widget=forms.RadioSelect)
    number_of_guests = forms.IntegerField(initial=0)
    comment = forms.CharField(max_length=255, required=False, widget=forms.Textarea)

    ....    

    def save(self):
        guest = self.guest_class.objects.get(user=1)
        guest.attending_status_d = self.cleaned_data['attending_d']
        guest.attending_status_b = self.cleaned_data['attending_b']
        guest.number_of_guests = self.cleaned_data['number_of_guests']
        guest.comment = self.cleaned_data['comment']
        guest.save()
        return guest
Run Code Online (Sandbox Code Playgroud)

问题出在save方法中.如何将访客与当前登录的用户相关联?

guest = self.Guest.objects.get(user=1)
Run Code Online (Sandbox Code Playgroud)

而不是user=1我需要具有当前登录用户的id.

谢谢!

django-forms django-users

30
推荐指数
1
解决办法
3万
查看次数

Django:扩展User时,最好使用OneToOneField(User)或ForeignKey(User,unique = True)?

我正在通过扩展Django User模型找到有关是否使用OneToOneField(User)ForeignKey(User, unique=True)创建UserProfile模型的相互矛盾的信息.

使用它更好吗?:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
Run Code Online (Sandbox Code Playgroud)

或这个?:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
Run Code Online (Sandbox Code Playgroud)

Django的文件规定OneToOneField,而Django的书例子使用ForeignKey.

詹姆斯贝内特也有两篇博客文章,也提供了相互矛盾的例子:

在前一篇文章中,Bennett提供了一些原因,为什么他转而使用ForeignKey而不是OneToOneField,但我不太明白,特别是当我看到推荐相反的其他帖子时.

我很想知道你的偏好和原因.或者,它甚至重要吗?

django django-models django-profiles django-users

29
推荐指数
3
解决办法
2万
查看次数

Django用户模型,添加功能

我想在Django的默认用户模型中添加一个新函数,用于检索模型类型的相关列表.

这样的Foo模型:

class Foo(models.Model):
    owner = models.ForeignKey(User, related_name="owner")
    likes = models.ForeignKey(User, related_name="likes")
Run Code Online (Sandbox Code Playgroud)

........

    #at some view
    user = request.user
    foos= user.get_related_foo_models()
Run Code Online (Sandbox Code Playgroud)

怎么能实现这一目标?

django django-models django-users

28
推荐指数
2
解决办法
1万
查看次数

Django抽象用户错误

我正在使用以下代码扩展基于文档的User类:

from django.contrib.auth.models import AbstractUser

class MyUser(AbstractUser):
  some_extra_data = models.CharField(max_length=100, blank=True)
Run Code Online (Sandbox Code Playgroud)

但是,我将返回以下错误

Reverse accessor for 'User.groups' clashes with reverse accessor for 'MyUser.groups'.
HINT: Add or change a related_name argument to the definition for 'User.groups' or 'MyUser.groups'.
Run Code Online (Sandbox Code Playgroud)

我理解通过向FK添加related_name来解决此类冲突.在这种情况下我该如何解决?

django django-users

27
推荐指数
2
解决办法
2万
查看次数

Django - 多个用户配置文件

最初,我像这样开始我的UserProfile:

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    verified = models.BooleanField()
    mobile = models.CharField(max_length=32)

    def __unicode__(self):
        return self.user.email
Run Code Online (Sandbox Code Playgroud)

哪个适用于AUTH_PROFILE_MODULE = 'accounts.UserProfile'设置settings.py.

但是,我的网站中有两种不同的用户,个人和企业,每个都有自己独特的属性.例如,我希望我的个人用户只有一个用户,因此拥有user = models.OneToOneField(User),而对于企业,我希望他们有多个用户与相同的个人资料相关,所以我会user = models.ForeignKey(User)改为.

所以我考虑将模型分成两个不同的模型,IndivProfile并且CorpProfile都继承自UserProfile将模型特定的属性移动到相关的子模型中.对我来说似乎是一个好主意并且可能会有效,但是我无法指定AUTH_PROFILE_MODULE这种方式,因为我有两个不同用户的用户配置文件.

我也考虑过这样做,UserProfile从多个类(模型)继承,如下所示:

class UserProfile(IndivProfile, CorpProfile):
    # some field

    def __unicode__(self):
        return self.user.email
Run Code Online (Sandbox Code Playgroud)

这样我就可以设置AUTH_PROFILE_MODULE = 'accounts.UserProfile'并解决它的问题.但是看起来它看起来不会起作用,因为python中的继承从左到右工作,所有变量IndivProfile都占主导地位.

当然,我总是可以将一个模型IndivProfileCorpProfile变量全部混合在一起,然后我会在必要时使用所需的模型.但这对我来说看起来并不干净,我宁愿让它们隔离并在适当的地方使用适当的模型.

的任何建议清洁这样的方式?

django django-models django-users

25
推荐指数
2
解决办法
1万
查看次数