我有一个简单的Employee模型,其中包括firstname, lastname和middlename领域.
在管理员方面,可能在其他地方,我想将其显示为:
lastname, firstname middlename
Run Code Online (Sandbox Code Playgroud)
对我来说,这样做的合理位置是在模型中通过创建一个计算字段:
from django.db import models
from django.contrib import admin
class Employee(models.Model):
lastname = models.CharField("Last", max_length=64)
firstname = models.CharField("First", max_length=64)
middlename = models.CharField("Middle", max_length=64)
clocknumber = models.CharField(max_length=16)
name = ''.join(
[lastname.value_to_string(),
',',
firstname.value_to_string(),
' ',
middlename.value_to_string()])
class Meta:
ordering = ['lastname','firstname', 'middlename']
class EmployeeAdmin(admin.ModelAdmin):
list_display = ('clocknumber','name')
fieldsets = [("Name", {"fields":(("lastname", "firstname", "middlename"), "clocknumber")}),
]
admin.site.register(Employee, EmployeeAdmin)
Run Code Online (Sandbox Code Playgroud)
最终我认为我需要的是将名称字段的值作为字符串.我得到的错误是value_to_string() takes exactly 2 arguments (1 given).字符串想要的值self, obj …
我有三个模型,简化为例子:
class Customer(models.Model):
email = models.CharField(max_length=128)
class Order(models.Model):
customer = models.ForeignKey(Customer)
order_status = models.CharField(blank=True, max_length=256)
class Lineitem(models.Model):
order = models.ForeignKey(Order)
quantity = models.IntegerField(blank=True)
price = models.DecimalField(max_digits=6, decimal_places=2)
Run Code Online (Sandbox Code Playgroud)
我想查询客户(可能使用过滤器)并注释他们花费的总额(即总和(价格*数量))
我试过了:
Customer.objects.filter(something).annotate(total_spent=Sum(F('order__lineitem__quantity') * F('order__lineitem__price')))
似乎Sum()不能与F()表达式一起使用.还有另一种方法吗?
我有两个领域的模型:
class Event(models.Model):
date = models.DateField(_(u'Date'))
time = models.TimeField(_(u'Time'))
Run Code Online (Sandbox Code Playgroud)
我需要找到日期和时间在24小时后的所有对象.
我可以在使用DateTime字段时执行此操作,但我不确定如何在字段分隔时实现此目的.提前致谢.