Django-将choice字段添加到Django admin list\u筛选器
这是我的django管理类之一:Django-将choice字段添加到Django admin list\u筛选器,django,django-admin,django-admin-actions,Django,Django Admin,Django Admin Actions,这是我的django管理类之一: class InactiveSiteAdmin(SiteAdmin): change_list_template = 'admin/change_list_inactive.html' list_display = ('is_active', 'thumb', 'name', 'show_url', 'get_desc', 'keywords','category', 'subcategory', 'category1', 's
class InactiveSiteAdmin(SiteAdmin):
change_list_template = 'admin/change_list_inactive.html'
list_display = ('is_active', 'thumb', 'name', 'show_url', 'get_desc',
'keywords','category', 'subcategory', 'category1', 'subcategory1',
'group')
fields = ('name', 'url', 'id', 'category', 'subcategory', 'category1',
'subcategory1', 'description',
'keywords', 'date', 'group', 'user', 'is_active', 'date_end',)
readonly_fields = ('date', 'date_end', 'id')
list_display_links = ('name',)
actions = [activate_sites, activate_sites1, ]
def get_queryset(self, request):
return Site.objects.filter(is_active=False)
def response_change(self, request, obj):
return redirect('/admin/mainapp/site/{}/change/'.format(obj.id))
def has_add_permission(self, request):
return False
“激活_站点”操作用于接受选定对象(使其可见)和向obj.email发送确认电子邮件(选定对象的电子邮件字段)。我想在列表显示中添加另一个字段-例如“电子邮件文本”,超级用户可以在其中选择正确的文本消息(使用选择字段)。可能吗?例如,我有3个对象。我想给机会激活所有3个对象,并为每个对象选择不同的文本消息
我尝试添加如下内容:
def email_send_field(self, request):
MY_CHOICES = (
('A', 'Choice A'),
('B', 'Choice B'),
)
return(forms.ChoiceField(choices=MY_CHOICES))
但是我在列表显示中得到了“”。您可以使用该方法插入自定义html并在POST数据中获取所选值
请注意为每个select元素生成一个唯一的名称
在本例中,它使用对象主键:
from django.utils.html import format_html
MY_CHOICES = (
('msg1', 'Hello'),
('msg2', 'Hi'),
)
class InactiveSiteAdmin(SiteAdmin):
list_display = list_display = ( ..., 'show_select')
actions = ['send_email']
def show_select(self, obj):
html_select = "<select name='dropdown-obj-"+str(obj.pk)+"'>"
for option in MY_CHOICES:
html_select += "<option value='{}'>{}</option>".format(option[1], option[0])
html_select += "</select> "
return format_html(html_select)
def send_email(self, request, queryset):
for obj in queryset:
obj_msg = request.POST['dropdown-obj-'+str(obj.pk)]
#do something with the custom message
来自django.utils.html导入格式\u html
我的选择=(
('msg1','Hello'),
('msg2','Hi'),
)
类不活动SiteAdmin(SiteAdmin):
列表显示=列表显示=(…,“显示选择”)
操作=['send_email']
def显示_选择(自身、obj):
html_select=“”
对于MY_选项中的选项:
html_select+=“{}”。格式(选项[1],选项[0])
html_选择+=“”
返回格式\u html(html\u选择)
def发送电子邮件(自我、请求、查询集):
对于queryset中的obj:
obj_msg=request.POST['dropdown-obj-'+str(obj.pk)]
#对自定义消息执行一些操作
谢谢。这是个好主意。我正走在解决所有问题的正确道路上;)