2015-08-28 3 views
1

В администраторе django я хочу проверить значение поля в пользовательском действии. В приведенном ниже примере я пытаюсь сделать следующее, но это не возвращает имя поля. Как получить значение «status» из набора запросов?Как проверить значение поля в пользовательском действии в администраторе Django?

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) 

ответ

1

Каждый объект в QuerySet может иметь различный статус, так что не имеет смысла, чтобы получить статус QuerySet.

Если вы зацикливаете запрос, вы можете получить статус для каждого отдельного объекта.

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" 
Смежные вопросы