我必须在django-admin页面上的模型之一中添加一个Update按钮,并且match_action是django-admin上的update按钮,而match_status是我的管理命令,这是我的代码,实际上是我想要的,当我单击更新按钮我想使用管理命令
运行名为GoalserveService的服务admin.py`
@admin.register(Match)
class MatchAdmin(admin.ModelAdmin):
list_display = ['id', 'start_time', "home_club", 'away_club', 'created_on', 'status', 'lookup_id', 'timer', 'match_actions']
search_fields = ['id', 'home_club__name', 'away_club__name']
list_filter = ['status', 'season', 'start_time']
inlines = [ MatchLookupInline, MatchEventInline, ]
def lookup_id(self, obj):
if obj.matchlookup_set.all().exists():
return obj.matchlookup_set.get().source_match_id
else:
return None
def get_urls(self):
urls = super().get_urls()
custom_urls = [
url(
r'^(?P<match_id>.+)/update/$',
self.admin_site.admin_view(self.match_update),
name='match-update',
),
]
return custom_urls + urls
def match_actions(self, obj):
print (obj.id)
return format_html(
'<a class="button" href="{}">Update</a>',
reverse('admin:match-update', args=(obj.id,)),
)
def match_update(self, request, match_id, *args):
from django.core.management import call_command
call_command("match_status", match_id)
core / management / commands / match_status.py
from django.utils import timezone
from django.core.management.base import BaseCommand, CommandError
from core.models import UserTeam
from ourapp.models import Match
class Command(BaseCommand):
help = 'Update Match Status'
def add_arguments(self, parser):
parser.add_argument('match_id', nargs='+', type=int)
def handle(self, *args, **options):
# NOT_STARTED = 0
# HF = 1
# FT = 2
# IN_PLAY = 3
# FINISH = 4
match = Match.objects.filter(id=options.get('match_id'))
self.stdout.write(self.style.NOTICE("Match competition Name %s Match Found" % match.competition.name))
current_time = timezone.now()
try:
import time
self.stdout.write(self.style.NOTICE("Match competition Name %s Match Found" % match.competition.name if match.competition else "N/A"))
match = Match.objects.filter(id=options.get('match_id'))
time.sleep(5)
from ourapp.services import goalserveService
try:
goalserveService.run_match_events(match.pk, 2, update_df=False, update_round=False)
time.sleep(5)
except:
pass
from django.core.management import call_command
call_command("update_dfc_rank", 1)
except Match.DoesNotExist:
raise CommandError('League "%s" does not exist' % match)
self.stdout.write(self.style.SUCCESS('Successfully closed league "%s"' % match))
但显示错误
答案 0 :(得分:-2)
每当在代码中看到.objects.filter
时,您都将返回QuerySet
。 QuerySet
可以解释为“列表”。对于初学者,将.filter
替换为.get
以解决当前错误(但我不能保证以后不会再遇到新错误)。