【发布时间】:2021-12-30 07:14:12
【问题描述】:
我想在 django 中进行过滤,并且我想使用来自 custumUser 的 date_created 作为我的过滤器。我可以使用 list_display 向我的管理面板显示 date_create,但我无法在页面上过滤它。 我的 models.py 就是这样。
class CustomUser(AbstractBaseUser):
email = models.EmailField(max_length=200, unique=True, verbose_name='Email')
username = models.CharField(max_length=150, verbose_name='Username')
first_name = models.CharField(max_length=150, verbose_name='First Name')
last_name = models.CharField(max_length=150, verbose_name='Last Name')
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
date_created = models.DateTimeField(auto_now=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
objects = UserManager()
def get_full_name(self):
# The user is identified by their email address
return self.email
def get_short_name(self):
# The user is identified by their email address
return self.email
def __str__(self):
return self.email
# this methods are require to login super user from admin panel
def has_perm(self, perm, obj=None):
return self.is_admin
# this methods are require to login super user from admin panel
def has_module_perms(self, app_label):
return self.is_admin
class Meta:
verbose_name = ('user')
verbose_name_plural = ('users')
class EmailConfirmed(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
activation_key = models.CharField(max_length=500)
email_confirmed = models.BooleanField(default=False)
date_confirmed = models.DateTimeField(auto_now=True)
def __str__(self):
return self.user.email
class Meta:
verbose_name_plural = 'User Email Confirmed'
@receiver(post_save, sender=CustomUser)
def create_user_email_confirmation(sender, instance, created, **kwargs):
if created:
dt = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
email_confirmed_instance = EmailConfirmed(user=instance)
user_encoded = f'{instance.email}-{dt}'.encode()
activation_key = hashlib.sha224(user_encoded).hexdigest()
email_confirmed_instance.activation_key = activation_key
email_confirmed_instance.save()
和我的 admin.py
class UserAdmin(BaseUserAdmin):
add_form = UserCreationForm
form = UserChangeForm
list_display = ('email', 'first_name', 'last_name', 'is_active', 'is_admin', 'is_staff','is_superuser','date_created')
list_filter = ('is_admin', 'is_staff','date_created',)
field_sets = (
(
None, {'fields': ('email', 'first_name', 'last_name', 'password')}
),
(
'Permissions', {'fields': ('is_admin', 'is_staff', 'is_superuser')}
)
)
add_fieldsets = (
(
None, {
'fields': ('email', 'first_name', 'last_name', 'is_active', 'password1', 'password2')
}
),
('Permissions', {'fields': ('is_admin', 'is_superuser')})
)
ordering = ('email',)
search_fields = ('email',)
filter_horizontal = ()
admin.site.register(User, UserAdmin)
class EmailConfirmedAdmin(admin.ModelAdmin):
list_display = ('user', 'first_name', 'last_name', 'date_created', 'email_confirmed', 'date_confirmed')
list_filter = ('email_confirmed', 'date_confirmed', )
def date_created(self, obj):
return obj.user.date_created
def first_name(self, obj):
return obj.user.first_name
def last_name(self, obj):
return obj.user.last_name
admin.site.register(EmailConfirmed, EmailConfirmedAdmin)
我想添加管理面板以使用属于 CustomUser 的 date_created 过滤 当我在 list_filter 中写 date_created 时出现错误。 怎么会这样?
【问题讨论】:
标签: python django filter django-filter