我正在为车间(汽车/摩托车)构建 Django 项目。
在模型和服务类中有一个客户类。在管理员中,我想显示每个客户的服务数量,我被教导使用 get_queryset 并为该计数定义一个变量,但它不想工作,可能是一个非常简单的修复,但我不能让我的头脑绕过它!希望这里有知道的,万分感谢! :-)
模型.PY
from django.db import models
# Create your models here.
class Fordonsregister(models.Model):
regnr = models.CharField(max_length=6, primary_key=True, null=False, blank=False)
namn = models.CharField(max_length=255, null=True, blank=True)
tel = models.CharField(max_length=255, default='070-000 00 00', null=True, blank=True)
email = models.EmailField(null=True, blank=True)
kund_sedan = models.DateTimeField(auto_now=True)
kund_points = models.IntegerField(default=0)
def __str__(self) -> str:
return self.regnr
class Meta:
ordering = ['regnr']
class ServiceTypes(models.Model):
typ = models.CharField(max_length=255, primary_key=True, blank=False)
pris = models.DecimalField(decimal_places=2, max_digits=6, null=False, blank=False)
beskrivning = models.CharField(max_length=255, null=True, blank=True)
def __str__(self) -> str:
return self.typ
class Meta:
ordering = ['typ']
class FordonsService(models.Model):
regnr = models.ForeignKey(Fordonsregister, on_delete=models.CASCADE)
typ = models.ForeignKey(ServiceTypes, on_delete=models.CASCADE)
service_datum = models.DateTimeField()
bokat_datum = models.DateTimeField(auto_now=True)
kommentar = models.CharField(max_length=1000)
class Meta:
ordering = ['-service_datum']
管理员.PY
from django.contrib import admin
from django.db.models import Count
from django.http import HttpRequest
from .models import Fordonsregister, ServiceTypes, FordonsService
# Register your models here.
@admin.register(Fordonsregister)
class FordonsregisterAdmin(admin.ModelAdmin):
list_display = ['regnr', 'namn', 'tel', 'email', 'post_count']
search_fields = ['regnr__istartswith']
# list_select_related = ['fordonsservice']
def post_count(self, obj):
return obj.post_count
def get_queryset(self, request):
queryset = super().get_queryset(request)
queryset = queryset.annotate(post_count=Count("regnr"))
return queryset
@admin.register(FordonsService)
class FordonsServiceAdmin(admin.ModelAdmin):
list_display = ['regnr', 'typ', 'service_datum', 'bokat_datum']
@admin.register(ServiceTypes)
class ServiceTypesAdmin(admin.ModelAdmin):
list_display = ['typ', 'pris']
抛出的错误是:
FieldError 在 /admin/main/fordonsregister/ 无法将关键字“service_datum”解析为字段。选项有:email, fordonsservice, kund_points, kund_sedan, namn, regnr, standardoffert, tel
我对 Python 相当擅长,但主要是数据分析,对 Django 很陌生:-)
好吧,我想通了,我需要在列前加上表格和两个下划线...
所以在下面的脚本中:
计数(“服务数据”) 变成: 计数(“fordonsservice__service_datum”)
@admin.register(Fordonsregister)
class FordonsregisterAdmin(admin.ModelAdmin):
list_display = ['regnr', 'namn', 'tel', 'email', 'post_count']
search_fields = ['regnr__istartswith']
# list_select_related = ['fordonsservice']
def post_count(self, fordonregister):
return fordonregister.post_count
def get_queryset(self, request):
queryset = super().get_queryset(request)
queryset = queryset.annotate(post_count=Count("fordonsservice__service_datum"))
return queryset ```