Django Admin 显示相关字段的计数

问题描述 投票:0回答:1

我正在为车间(汽车/摩托车)构建 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 很陌生:-)

python django django-admin django-queryset
1个回答
0
投票

好吧,我想通了,我需要在列前加上表格和两个下划线...

所以在下面的脚本中:

计数(“服务数据”) 变成: 计数(“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 ```
© www.soinside.com 2019 - 2024. All rights reserved.