[英]Django model reference and manipulation
我在Django中有以下模型,其结构如下:
class Office_Accounts(models.Model):
accountid = models.EmailField(max_length=200, unique=True)
validtill = models.DateField(default=datetime.now)
limit = models.CharField(max_length=2)
class Device(models.Model):
device_type = models.ForeignKey(DeviceType,to_field='device_type')
serial_number = models.CharField(max_length=200,unique=True)
in_use_by = models.ForeignKey(User,to_field='username')
brand = models.CharField(max_length=200,default="-", null=False)
model = models.CharField(max_length=200,default="-", null=False)
type_number = models.CharField(max_length=200,blank=True,null=True, default = None)
mac_address = models.CharField(max_length=200,blank=True,null=True, default = None)
invoice = models.FileField(upload_to='Device_Invoice', null=True, blank = True)
msofficeaccount = models.ForeignKey(Office_Accounts, to_field="accountid")
class Meta:
verbose_name_plural = "Devices"
def full_name(self):
return self.device_type + self.serial_number + self.brand
我将在admin.py中显示两个模型。 现在,我想显示Office_Accounts模型的管理页面中“ msofficeaccount”字段(存在于设备模型中)中存在的每个帐户标识的计数。 例如,如果xyz@abc.com出现在msofficeaccount字段的10行中,则该计数应在Office_Accounts管理页面中显示为10。 谁能指导我如何解决这个问题?
您可以在您的管理类中添加一个方法,该方法返回每个office_account的相关设备的数量,但是效率很低。 相反,您可以重写get_queryset
来注释数据库聚合函数中的计数:
from django.db.models import Count
class Office_AccountsAdmin(admin.ModelAdmin):
list_display = (..., 'device_count')
...
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.annotate(device_count=Count('device'))
(需要注意的一点是,Python样式始终使用CamelCase作为类名,而Django样式始终使用单个模型名,因此您的模型应真正称为OfficeAccount。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.