如何检查 Django 管理中自定义操作中字段的值?

How do I check the value of a field in a custom action in Django admin?

在 django admin 中,我想检查自定义操作中字段的值。在下面的示例中,我正在尝试执行以下操作,但这不是检索字段名称。如何从查询集中获取 'status' 的值?

if queryset.status != 'd':

完整示例如下:

from django.contrib import admin
from myapp.models import Article

def make_published(modeladmin, request, queryset):
    if queryset.status != 'd':
        queryset.update(status='p')
make_published.short_description = "Mark selected stories as published"

class ArticleAdmin(admin.ModelAdmin):
    list_display = ['title', 'status']
    ordering = ['title']
    actions = [make_published]

admin.site.register(Article, ArticleAdmin)

查询集中的每个对象可能具有不同的状态,因此获取查询集的状态没有意义。

如果循环遍历查询集,您可以获得每个单独对象的状态。

for obj in queryset:
    status = obj.status

您可以使用 exclude() 删除具有特定状态的对象,如下所示:

def make_published(modeladmin, request, queryset):
    queryset = queryset.objects.exclude(status='d')
    queryset.update(status='p')
make_published.short_description = "Mark selected stories as published"