从 Django 管理面板中删除密码字段
Remove password field from django admin panel
我在 Django 管理面板中实现了 Post class 的搜索和过滤。 Post class 没有密码字段,但密码字段出现在管理面板中。我想从管理面板中删除它。
# admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.db import models
from .models import Post, Comment
class PostAdmin(UserAdmin):
ordering = ('created_at',)
list_display = ('author', 'blood_group', 'required_bags', 'contact_number', 'created_at', 'is_resolved', 'admin_approved')
search_fields = ('author__name', 'blood_group', 'is_resolved',) # Can not add author as it is a foregin key to post
readonly_fields = ('created_at',)
exclude = ('password',)
filter_horizontal = ()
list_filter = ()
fieldsets = ()
admin.site.register(Post, PostAdmin)
admin.site.register(Comment)
我尝试使用 post 应用的 admin.py 中的 exclude = ('password',)
删除密码字段。它适用于我的 User 模型,它实际上有密码字段。但它不适用于 Post 模型。
这是 forms.py
的代码
# forms.py
from django.forms import ModelForm
from .models import Post, Comment
from django import forms
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['description', 'address', 'blood_group', 'required_bags', 'deadlineDate', 'deadlineTime', 'contact_number', 'is_resolved']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for name, field, in self.fields.items():
field.widget.attrs.update({'class' : 'form-control'})
self.fields['deadlineDate'].widget.input_type = 'date'
self.fields['deadlineTime'].widget.input_type = 'time'
self.fields['contact_number'].widget.input_type = 'number'
self.fields['description'].widget.attrs.update({'rows' : '4'})
self.fields['is_resolved'].widget.attrs.update({'class' : 'form-check-input'})
这是 modes.py
的代码
# models.py
from django.db import models
from author.decorators import with_author
BLOOD_GROUPS = [
('A+', 'A+'),
('A-', 'A-'),
('B+', 'B+'),
('B-', 'B-'),
('AB+', 'AB+'),
('AB-', 'AB-'),
('O+', 'O+'),
('O-', 'O-'),
]
@with_author
class Post(models.Model):
description = models.TextField(null=True, blank=True)
address = models.CharField(max_length=250)
blood_group = models.CharField(max_length=8, choices=BLOOD_GROUPS)
required_bags = models.PositiveIntegerField()
deadlineDate = models.DateField()
deadlineTime = models.TimeField()
contact_number = models.CharField(max_length=15)
created_at = models.DateTimeField(auto_now_add=True)
is_resolved = models.BooleanField(default=False, blank=True)
admin_approved = models.BooleanField(default=False)
def __str__(self):
return str(self.author) + ", " + str(self.blood_group) + ", " + str(self.address)
在我看来你应该从 ModelAdmin
继承 PostAdmin
,而不是 UserAdmin
,因为你的 Post
模型没有连接到 User
模型无论如何。
# forms.py
from django.contrib.admin import ModelAdmin
from django.forms import ModelForm
from .models import Post, Comment
from django import forms
class PostForm(ModelAdmin):
class Meta:
model = Post
fields = ['description', 'address', 'blood_group', 'required_bags', 'deadlineDate', 'deadlineTime', 'contact_number', 'is_resolved']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for name, field, in self.fields.items():
field.widget.attrs.update({'class' : 'form-control'})
self.fields['deadlineDate'].widget.input_type = 'date'
self.fields['deadlineTime'].widget.input_type = 'time'
self.fields['contact_number'].widget.input_type = 'number'
self.fields['description'].widget.attrs.update({'rows' : '4'})
self.fields['is_resolved'].widget.attrs.update({'class' : 'form-check-input'})
UserAdmin
是专门显示User
模型的管理页面。
我在 Django 管理面板中实现了 Post class 的搜索和过滤。 Post class 没有密码字段,但密码字段出现在管理面板中。我想从管理面板中删除它。
# admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.db import models
from .models import Post, Comment
class PostAdmin(UserAdmin):
ordering = ('created_at',)
list_display = ('author', 'blood_group', 'required_bags', 'contact_number', 'created_at', 'is_resolved', 'admin_approved')
search_fields = ('author__name', 'blood_group', 'is_resolved',) # Can not add author as it is a foregin key to post
readonly_fields = ('created_at',)
exclude = ('password',)
filter_horizontal = ()
list_filter = ()
fieldsets = ()
admin.site.register(Post, PostAdmin)
admin.site.register(Comment)
我尝试使用 post 应用的 admin.py 中的 exclude = ('password',)
删除密码字段。它适用于我的 User 模型,它实际上有密码字段。但它不适用于 Post 模型。
这是 forms.py
的代码# forms.py
from django.forms import ModelForm
from .models import Post, Comment
from django import forms
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['description', 'address', 'blood_group', 'required_bags', 'deadlineDate', 'deadlineTime', 'contact_number', 'is_resolved']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for name, field, in self.fields.items():
field.widget.attrs.update({'class' : 'form-control'})
self.fields['deadlineDate'].widget.input_type = 'date'
self.fields['deadlineTime'].widget.input_type = 'time'
self.fields['contact_number'].widget.input_type = 'number'
self.fields['description'].widget.attrs.update({'rows' : '4'})
self.fields['is_resolved'].widget.attrs.update({'class' : 'form-check-input'})
这是 modes.py
的代码# models.py
from django.db import models
from author.decorators import with_author
BLOOD_GROUPS = [
('A+', 'A+'),
('A-', 'A-'),
('B+', 'B+'),
('B-', 'B-'),
('AB+', 'AB+'),
('AB-', 'AB-'),
('O+', 'O+'),
('O-', 'O-'),
]
@with_author
class Post(models.Model):
description = models.TextField(null=True, blank=True)
address = models.CharField(max_length=250)
blood_group = models.CharField(max_length=8, choices=BLOOD_GROUPS)
required_bags = models.PositiveIntegerField()
deadlineDate = models.DateField()
deadlineTime = models.TimeField()
contact_number = models.CharField(max_length=15)
created_at = models.DateTimeField(auto_now_add=True)
is_resolved = models.BooleanField(default=False, blank=True)
admin_approved = models.BooleanField(default=False)
def __str__(self):
return str(self.author) + ", " + str(self.blood_group) + ", " + str(self.address)
在我看来你应该从 ModelAdmin
继承 PostAdmin
,而不是 UserAdmin
,因为你的 Post
模型没有连接到 User
模型无论如何。
# forms.py
from django.contrib.admin import ModelAdmin
from django.forms import ModelForm
from .models import Post, Comment
from django import forms
class PostForm(ModelAdmin):
class Meta:
model = Post
fields = ['description', 'address', 'blood_group', 'required_bags', 'deadlineDate', 'deadlineTime', 'contact_number', 'is_resolved']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for name, field, in self.fields.items():
field.widget.attrs.update({'class' : 'form-control'})
self.fields['deadlineDate'].widget.input_type = 'date'
self.fields['deadlineTime'].widget.input_type = 'time'
self.fields['contact_number'].widget.input_type = 'number'
self.fields['description'].widget.attrs.update({'rows' : '4'})
self.fields['is_resolved'].widget.attrs.update({'class' : 'form-check-input'})
UserAdmin
是专门显示User
模型的管理页面。