feat: filter image tasks by input count
This commit is contained in:
+27
-1
@@ -1,4 +1,5 @@
|
||||
from django.contrib import admin
|
||||
from django.db.models import Count, Q
|
||||
|
||||
from .models import ImageGenerationTask, ImageGenerationTaskInput
|
||||
|
||||
@@ -11,6 +12,31 @@ class ImageGenerationTaskInputInline(admin.TabularInline):
|
||||
readonly_fields = fields
|
||||
|
||||
|
||||
class ImageInputTypeFilter(admin.SimpleListFilter):
|
||||
title = "输入图片类型"
|
||||
parameter_name = "input_image_type"
|
||||
|
||||
def lookups(self, request, model_admin):
|
||||
return (
|
||||
("single", "单图生图"),
|
||||
("multiple", "多图生图"),
|
||||
)
|
||||
|
||||
def queryset(self, request, queryset):
|
||||
value = self.value()
|
||||
if value not in {"single", "multiple"}:
|
||||
return queryset
|
||||
|
||||
input_counts = queryset.annotate(input_image_count=Count("input_images"))
|
||||
if value == "multiple":
|
||||
task_ids = input_counts.filter(input_image_count__gte=2).values("pk")
|
||||
return queryset.filter(pk__in=task_ids)
|
||||
|
||||
new_single_ids = input_counts.filter(input_image_count=1).values("pk")
|
||||
legacy_single_ids = queryset.filter(input_images__isnull=True).exclude(input_image="").values("pk")
|
||||
return queryset.filter(Q(pk__in=new_single_ids) | Q(pk__in=legacy_single_ids))
|
||||
|
||||
|
||||
@admin.register(ImageGenerationTask)
|
||||
class ImageGenerationTaskAdmin(admin.ModelAdmin):
|
||||
change_form_template = "admin/api/imagegenerationtask/change_form.html"
|
||||
@@ -25,7 +51,7 @@ class ImageGenerationTaskAdmin(admin.ModelAdmin):
|
||||
"created_at",
|
||||
"finished_at",
|
||||
)
|
||||
list_filter = ("status", "created_at", "next_attempt_at", "finished_at")
|
||||
list_filter = (ImageInputTypeFilter, "status", "created_at", "next_attempt_at", "finished_at")
|
||||
search_fields = (
|
||||
"task_id",
|
||||
"user__username",
|
||||
|
||||
Reference in New Issue
Block a user