标签: django-users

Django:为什么要创建一个OneToOne到UserProfile而不是子类化auth.User?

注意:如果你想通过告诉我你不喜欢django.contrib.auth来回答这个问题,请继续.这没有用.我很清楚这个问题的意见范围和力度.

现在,问题是:

惯例是使用OneToOne to User创建一个模型UserProfile.

在我能想到的各种方式中,一种更有效和更有效的方法是将User子类化为一个打算用于系统中每个人的类 - 一个名为Person(User)的类.

我没有看到为什么前者是传统的而后者被视为黑客的连贯解释.不久之前,我改用了OneToOne方法,以便获得使用get_profile()的能力,从此我就后悔了.除非我能理解这种方法的优点,否则我正在考虑转回去.

django django-models django-contrib django-authentication django-users

9
推荐指数
1
解决办法
2969
查看次数

Django - admin中的UserProfile m2m字段 - 错误

我的模特:

class UserProfile(models.Model):
    TYPES_CHOICES = (
        (0, _(u'teacher')),
        (1, _(u'student')),
    )
    user = models.ForeignKey(User, unique=True)
    type = models.SmallIntegerField(default=0, choices=TYPES_CHOICES, db_index=True)
    cities = models.ManyToManyField(City)
class City(models.Model):
    name = models.CharField(max_length=50)
    slug = models.SlugField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

在admin.py中:

admin.site.unregister(User) 
class UserProfileInline(admin.StackedInline):
    model = UserProfile

class UserProfileAdmin(UserAdmin):
    inlines = [UserProfileInline]

admin.site.register(User, UserProfileAdmin)

@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
    """Create a matching profile whenever a user object is created."""
    if created:
        profile, new = UserProfile.objects.get_or_create(user=instance)
Run Code Online (Sandbox Code Playgroud)

但是当我添加新用户并选择一个城市时,我得到了这个错误:/ admin/auth/user/add /中的IntegrityError(1062,"密钥'user_id'的重复条目'3'")

我的代码出了什么问题?如果我没有选择任何城市 - 用户被正确添加.某种程度上,用户被多次添加到UserProfile.

django django-models django-admin django-users

9
推荐指数
1
解决办法
2042
查看次数

Django如何在用户删除后删除用户的个人资料和帖子以及所有关联?

我正在写一个django项目.并且想知道用户删除自己的帐户后,有没有办法django内置自动删除与该用户相关的所有对象(例如一些通用的foreign_key)?或者我应该使用信号"post_delete"来删除每个相关的对象?

django django-models django-users

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

如何在Django Admin中默认将user.is_staff设置为True?

在Admin界面中创建用户时,我需要将is_staff值设置为True.

我怎样才能做到这一点?

谢谢

django django-admin django-users

9
推荐指数
1
解决办法
4609
查看次数

从Django Auth中的UserChangeForm中排除用户名或密码

我正在试图找出如何从中排除用户名和/或密码的方法UserChangeForm.我试过了两个exclude,fields但我不适用于这两个领域.

这是一些代码:

class ArtistForm(ModelForm):
    class Meta:
        model = Artist
        exclude = ('user',)

class UserForm(UserChangeForm):
    class Meta:
        model = User
        fields = (
            'first_name',
            'last_name',
            'email',
            )
        exclude = ('username','password',)

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper
        self.helper.form_tag = False
        super(UserForm, self).__init__(*args, **kwargs)
        artist_kwargs = kwargs.copy()
        if kwargs.has_key('instance'):
            self.artist = kwargs['instance'].artist
            artist_kwargs['instance'] = self.artist
        self.artist_form = ArtistForm(*args, **artist_kwargs)
        self.fields.update(self.artist_form.fields)
        self.initial.update(self.artist_form.initial)

    def clean(self):
        cleaned_data = super(UserForm, self).clean()
        self.errors.update(self.artist_form.errors)
        return cleaned_data

    def save(self, commit=True):
        self.artist_form.save(commit)
        return super(UserForm, …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-authentication django-users

9
推荐指数
2
解决办法
4414
查看次数

实现自定义用户模型时,creatuperuser会出现问题

我试图在Django 1.6中实现我自己的自定义用户模型,但我收到此错误.

Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/gabriel/.virtualenvs/hang_server/lib/python3.4/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/Users/gabriel/.virtualenvs/hang_server/lib/python3.4/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/gabriel/.virtualenvs/hang_server/lib/python3.4/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Users/gabriel/.virtualenvs/hang_server/lib/python3.4/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/Users/gabriel/.virtualenvs/hang_server/lib/python3.4/site-packages/django/contrib/auth/management/commands/createsuperuser.py", line 141, in handle
    self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
TypeError: create_superuser() missing 1 required positional argument: 'email'
Run Code Online (Sandbox Code Playgroud)

这是我的UserManager

class UserManager(BaseUserManager):

  def _create_user(self, username, email, password, is_staff, is_superuser, **extra_fields):
    now = timezone.now()
    email = self.normalize_email(email)
    user = …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-users

9
推荐指数
1
解决办法
7582
查看次数

运行"python manage.py migrate"命令时Django中的ValueError

我需要为Django的User模型添加更多字段,因此我创建了一个自定义模型类(在名为accounts的应用程序中名为Accounts),它扩展了Django的AbstractUser类.

之后,我更新了我的settings.py文件,定义了AUTH_USER_MODEL属性:

AUTH_USER_MODEL = 'accounts.Accounts'
Run Code Online (Sandbox Code Playgroud)

然后,我使用该python manage.py makemigrations命令为自定义模型创建了一个迁移文件.

之后,我运行python manage.py migrate命令,我收到此错误消息:

ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'accounts.accounts', but app 'accounts' isn't installed.
Run Code Online (Sandbox Code Playgroud)

错误的原因是什么?我该如何解决?

更新:现在,如果我运行该python manage.py makemigrations命令,我收到此错误消息:

ValueError: The field admin.LogEntry.user was declared with a lazy reference to 'accounts.accounts', but app 'accounts' doesn't provide model 'accounts'.
Run Code Online (Sandbox Code Playgroud)

django django-models django-users django-migrations

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

如何从Django中的组检查当前用户的权限?

我有一个EuropartsBuyer名为的组和模型Product.

以下代码向Product模型添加权限.

class Meta:
        permissions = (
            ("can_add_cost_price", "Can add cost price"),
        )
Run Code Online (Sandbox Code Playgroud)

在我的一个视图中,我有以下代码将此权限添加到该组.

europarts_buyer, created = Group.objects.get_or_create(name='EuropartsBuyer')
add_cost_price = Permission.objects.get(codename='can_add_cost_price')
europarts_buyer.permissions.add(add_cost_price)
Run Code Online (Sandbox Code Playgroud)

在Django Admin的帮助下,我已经向该组添加了一个用户EuropartsBuyer.

当我在另一个视图中使用以下代码时

if request.user.has_perm('can_add_cost_price'):
    do something
Run Code Online (Sandbox Code Playgroud)

结果应该是,True但它显示False.因此,if子句下的代码不会运行.

我已经在Django shell中导入了当前登录的用户,当我再次测试权限时,它显示为False.

我在这做错了什么?

django permissions django-permissions django-users

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

如何检查用户是否是 django 中的超级用户

我在ListView页面上列出注册用户,并尝试显示用户是否是超级用户。

我的主用户是使用python manage.py createsuperuser命令创建的,我确信它是超级用户,因为我也从管理面板检查过。

当我尝试打印它是否是超级用户时,我的代码总是显示输出False。这是我的代码:

视图.py

@method_decorator(staff_member_required, name='dispatch')
class Uyeler(ListView):
    model = User
    paginate_by = 40
    ordering = ['-pk']
    template_name = "panel/uyeler.html"
Run Code Online (Sandbox Code Playgroud)

并在模板文件中:

{% for obj in object_list %} 
  {% if obj.is_superuser %}
    SuperUser 
  {% else %}
    Not SuperUser {{ obj.is_superuser }}
  {% endif %}
    
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

对于包括我的超级用户帐户在内的所有用户,我的 html 输出都是“ Not SuperUser False ”。有任何想法吗?

python django django-views django-users

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

django用户模型中有多个USERNAME_FIELD

我的自定义用户模型:

class MyUser(AbstractBaseUser):
    username = models.CharField(unique=True,max_length=30)
    email = models.EmailField(unique=True,max_length=75)
    is_staff = models.IntegerField(default=False)
    is_active = models.IntegerField(default=False)
    date_joined = models.DateTimeField(default=None)

    # Use default usermanager
    objects = UserManager()

    USERNAME_FIELD = 'email'
Run Code Online (Sandbox Code Playgroud)

有没有办法指定多个USERNAME_FIELD?有类似的东西['email','username'],用户可以通过电子邮件和用户名登录?

django django-authentication django-users

8
推荐指数
2
解决办法
6832
查看次数