7
7
from django .urls import path
8
8
from django .shortcuts import render ,redirect
9
9
from django .core .paginator import Paginator
10
-
11
10
from django .contrib .auth .models import User , Group
12
11
from django .urls import reverse
13
12
from django .utils .html import format_html
14
13
from django .utils .translation import gettext_lazy as _
15
14
from .models import O_Feed , T_Feed
15
+ #from taggit.models import Tag
16
16
from .tasks import update_original_feed , update_translated_feed
17
17
from utils .modelAdmin_utils import CustomModelActions , get_translator_and_summary_choices , get_all_app_models , valid_icon
18
18
@@ -189,7 +189,7 @@ def __init__(self, *args, **kwargs):
189
189
190
190
class Meta :
191
191
model = O_Feed
192
- fields = ['feed_url' , 'update_frequency' , 'max_posts' , 'translator' , 'translation_display' , 'summary_engine' , 'summary_detail' , 'additional_prompt' , 'name ' , 'fetch_article ' , 'quality' ]
192
+ fields = ['feed_url' , 'update_frequency' , 'max_posts' , 'translator' , 'translation_display' , 'summary_engine' , 'summary_detail' , 'additional_prompt' , 'fetch_article ' , 'quality ' , 'name' , 'tags' , ]
193
193
194
194
# 重写save方法,以处理自定义字段的数据
195
195
def save (self , commit = True ):
@@ -216,9 +216,9 @@ class O_FeedAdmin(admin.ModelAdmin, CustomModelActions):
216
216
form = O_FeedForm
217
217
inlines = [T_FeedInline ]
218
218
list_display = ["name" , "is_valid" , "show_feed_url" , "translated_language" , "translator" , "size_in_kb" ,
219
- "update_frequency" , "last_updated" , "last_pull" ]
220
- search_fields = ["name" , "feed_url" ]
221
- list_filter = ["valid" ]
219
+ "update_frequency" , "last_updated" , "last_pull" , "tag_list" ]
220
+ search_fields = ["name" , "feed_url" , "tags__name" ]
221
+ list_filter = ["valid" , "tags" ]
222
222
actions = ['o_feed_force_update' , 'o_feed_export_as_opml' , 'o_feed_batch_modify' ]
223
223
224
224
@@ -264,6 +264,12 @@ def translated_language(self, obj):
264
264
return ", " .join (t_feed .language for t_feed in obj .t_feed_set .all ())
265
265
translated_language .short_description = _ ('Translated Language' )
266
266
267
+ def get_queryset (self , request ):
268
+ return super ().get_queryset (request ).prefetch_related ('tags' )
269
+
270
+ def tag_list (self , obj ):
271
+ return ", " .join (o .name for o in obj .tags .all ())
272
+
267
273
def size_in_kb (self , obj ):
268
274
return int (obj .size / 1024 )
269
275
@@ -310,7 +316,8 @@ def o_feed_batch_modify(self, request, queryset):
310
316
'summary_detail' : 'summary_detail_value' ,
311
317
'additional_prompt' : 'additional_prompt_value' ,
312
318
'fetch_article' : 'fetch_article' ,
313
- 'quality' : 'quality'
319
+ 'quality' : 'quality' ,
320
+ 'tags' : 'tags_value'
314
321
}
315
322
field_types = {
316
323
'update_frequency' : int ,
@@ -322,6 +329,7 @@ def o_feed_batch_modify(self, request, queryset):
322
329
'quality' : literal_eval
323
330
}
324
331
update_fields = {}
332
+ tags_value = None
325
333
for field , value_field in fields .items ():
326
334
value = post_data .get (value_field )
327
335
if post_data .get (field , 'Keep' ) != 'Keep' and value :
@@ -334,12 +342,20 @@ def o_feed_batch_modify(self, request, queryset):
334
342
content_type_summary_id , object_id_summary = map (int , value .split (':' ))
335
343
update_fields ['content_type_summary_id' ] = content_type_summary_id
336
344
update_fields ['object_id_summary' ] = object_id_summary
345
+ case 'tags' :
346
+ tags_value = value .split ("," )
337
347
case _:
338
348
update_fields [field ] = field_types .get (field , str )(value )
339
349
340
350
if update_fields :
341
351
queryset .update (** update_fields )
342
352
353
+ if tags_value is not None :
354
+ for obj in queryset :
355
+ obj .tags = [* tags_value ]
356
+ obj .save ()
357
+ #O_Feed.objects.bulk_update(queryset, ['tags'])??
358
+
343
359
#self.message_user(request, f"Successfully modified {queryset.count()} items.")
344
360
#return HttpResponseRedirect(request.get_full_path())
345
361
return redirect (request .get_full_path ())
@@ -348,19 +364,21 @@ def o_feed_batch_modify(self, request, queryset):
348
364
logging .info ("translator_choices: %s, summary_engine_choices: %s" , translator_choices , summary_engine_choices )
349
365
return render (request , 'admin/o_feed_batch_modify.html' , context = {** core_admin_site .each_context (request ), 'items' : queryset ,'translator_choices' : translator_choices , 'summary_engine_choices' : summary_engine_choices })
350
366
o_feed_batch_modify .short_description = _ ("Batch modification" )
351
-
367
+
352
368
353
369
class T_FeedAdmin (admin .ModelAdmin , CustomModelActions ):
354
370
list_display = ["id" , "feed_url" , "o_feed" , "status_icon" , "language" , "translate_title" , "translate_content" , "summary" , "total_tokens" , "total_characters" , "size_in_kb" , "modified" ]
355
- list_filter = ["status" , "translate_title" , "translate_content" ]
356
- search_fields = ["sid" ]
371
+ list_filter = ["status" , "translate_title" , "translate_content" , "o_feed__tags__name" ]
372
+ search_fields = ["sid" , "o_feed__tags__name" , "o_feed__feed_url" ]
357
373
readonly_fields = ["status" , "language" , "sid" , "o_feed" , "total_tokens" , "total_characters" , "size" , "modified" ]
358
374
actions = ['t_feed_force_update' , 't_feed_export_as_opml' , 't_feed_batch_modify' ]
359
- def get_search_results (self , request , queryset , search_term ):
360
- queryset , use_distinct = super ().get_search_results (request , queryset , search_term )
361
- queryset |= self .model .objects .filter (o_feed__feed_url__icontains = search_term )
362
- return queryset , use_distinct
363
-
375
+ # def get_search_results(self, request, queryset, search_term):
376
+ # queryset, use_distinct = super().get_search_results(request, queryset, search_term)
377
+ # queryset |= self.model.objects.filter(o_feed__feed_url__icontains=search_term)
378
+ # return queryset, use_distinct
379
+
380
+ def get_queryset (self , request ):
381
+ return super ().get_queryset (request ).prefetch_related ('o_feed__tags' )
364
382
365
383
def size_in_kb (self , obj ):
366
384
return int (obj .size / 1024 )
0 commit comments