我的模型相对简单,但我希望用户成为俱乐部的成员。超级用户不是俱乐部的成员
我决定use a Custom User Model Extending AbstractBaseUser并创建了模型、管理器,一切都很好。现在我想通过一个属性来扩展模型
型号。py:
from .managers import MyUserManager
class K2User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
date_joined = models.DateTimeField(_('date joined'), auto_now_add=True)
is_active = models.BooleanField(_('active'), default=True)
is_staff = models.BooleanField(_('active'), default=True)
# club_name = models.ForeignKey(Clubs, null=True,
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
def get_club_name(self):
return self.club_name
def __str__(self):
return self.email
class Clubs(models.Model):
club_name = models.CharField(max_length=32, unique=True)
club_create_date = models.DateTimeField('date created')
club_address = models.CharField(max_length=200)
email = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, verbose_name=_('user'), on_delete=models.CASCADE)
managers.py
from django.contrib.auth.base_user import BaseUserManager
from django.utils.translation import ugettext_lazy as _
class MyUserManager(BaseUserManager):
use_in_migrations = True
def _create_user(self, email, password, **extra_fields):
if not email:
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(email=email, **extra_fields)
# club_name = club_name
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, email, password=None, **extra_fields):
extra_fields.setdefault('is_superuser', False)
extra_fields.setdefault('is_staff', False)
return self._create_user(email, password, **extra_fields)
def create_superuser(self, email, password, **extra_fields):
extra_fields.setdefault('is_superuser', True)
extra_fields.setdefault('is_staff', True)
if extra_fields.get('is_superuser') is not True:
raise ValueError('Superuser must have is_superuser=True.')
if extra_fields.get('is_staff') is not True:
raise ValueError('Superuser must have is_staff=True.')
return self._create_user(email, password, **extra_fields)
如何将俱乐部名称添加到普通用户,以便他必须是俱乐部的成员,但超级用户没有此属性(或只是将其设置为null)
**编辑**
在我的管理员视图中,我仍然只看到每个俱乐部的一名成员-我想我必须修改admin.py来实现这一点
admin.py:
class K2UserAdmin(UserAdmin):
add_form = K2UserCreationForm
form = K2UserChangeForm
model = K2User
list_display = ('email', 'date_joined', 'is_active',)# 'merchant',)
list_filter = ('email', 'date_joined', 'is_active',)# 'merchant',)
fieldsets = ( (None, { 'fields': ('email', 'password') } ),
('Permissions', { 'fields': ('date_joined', 'is_active') } ), )
add_fieldsets = ( (None, {'classes': ('wide',),
'fields': ('email', 'password1', 'password2', 'date_joined', 'is_active') } ), )
readonly_fields = ('date_joined',)
admin.site.register(K2User, K2UserAdmin)
admin.site.register(Clubs)
实现这一点的最佳方法如下:
Club
和User
之间创建一个模型 (而不是创建M2M
字段)。我把它命名为Enrollment
李>Club
和User
外键放入此模型李>因此:
如果你这样做,你将来可以在这段关系中做任何你想做的事。
希望能有所帮助。
相关问题 更多 >
编程相关推荐