如何将计算字段添加到 Django 模型

编程入门 行业动态 更新时间:2024-10-25 13:14:38
本文介绍了如何将计算字段添加到 Django 模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有一个简单的 Employee 模型,其中包括 firstname、lastname 和 middlename 字段.

在管理方面,可能在其他地方,我想将其显示为:

lastname, firstname 中间名

对我来说,这样做的合乎逻辑的地方是在模型中创建一个计算字段:

from django.db 导入模型从 django.contrib 导入管理员类员工(模型.模型):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)名称 = ''.join([lastname.value_to_string(),',',firstname.value_to_string(),' ',middlename.value_to_string()])元类:ordering = ['姓氏','名字','中间名']类员工管理(admin.ModelAdmin):list_display = ('clocknumber','name')fieldsets = [("姓名", {"字段":(("姓氏", "名字", "中间名"), "clocknumber")}),]admin.site.register(员工,员工管理员)

我认为最终我需要的是将名称字段的值作为字符串获取.我得到的错误是 value_to_string() 需要 2 个参数(1 个给定).字符串的值需要 self, obj.我不确定 obj 是什么意思.

必须有一个简单的方法来做到这一点,我相信我不是第一个想要这样做的人.

下面是我根据丹尼尔的回答修改的代码.我得到的错误是:

django.core.exceptions.ImproperlyConfigured:EmployeeAdmin.list_display[1], 'name' 不是可调用的或在模型 'Employee' 中找到的 'EmployeeAdmin' 的属性.

from django.db 导入模型从 django.contrib 导入管理员类员工(模型.模型):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)@财产定义名称(自己):返回 '​​'.join([self.lastname,' ,', self.firstname, ' ', self.middlename])元类:ordering = ['姓氏','名字','中间名']类员工管理(admin.ModelAdmin):list_display = ('clocknumber','name')fieldsets = [("姓名", {"字段":(("姓氏", "名字", "中间名"), "clocknumber")}),]admin.site.register(员工,员工管理员)

解决方案

好的... Daniel Roseman 的回答似乎应该有效.与往常一样,您会在发布问题后找到您要找的内容.

从 Django 1.5 文档我发现这个例子开箱即用.感谢大家的帮助.

这是有效的代码:

from django.db 导入模型从 django.contrib 导入管理员类员工(模型.模型):lastname = models.CharField("Last", max_length=64)firstname = models.CharField(第一个", max_length=64)Middlename = models.CharField(Middle", max_length=64)clocknumber = models.CharField(max_length=16)def _get_full_name(self):返回此人的全名."return '%s, %s %s' % (self.lastname, self.firstname, self.middlename)full_name = 属性(_get_full_name)元类:ordering = ['姓氏','名字','中间名']类员工管理(admin.ModelAdmin):list_display = ('clocknumber','full_name')fieldsets = [(Name", {fields":((lastname", firstname", middlename"), clocknumber")}),]admin.site.register(员工,员工管理员)

I have a simple Employee model that includes firstname, lastname and middlename fields.

On the admin side and likely elsewhere, I would like to display that as:

lastname, firstname middlename

To me the logical place to do this is in the model by creating a calculated field as such:

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)

Ultimately what I think I need is to get the value of the name fields as strings. The error I am getting is value_to_string() takes exactly 2 arguments (1 given). Value to string wants self, obj. I am not sure what obj means.

There must be an easy way to do this, I am sure I am not the first to want to do this.

Edit: Below is my code modified to Daniel's answer. The error I get is:

django.core.exceptions.ImproperlyConfigured: EmployeeAdmin.list_display[1], 'name' is not a callable or an attribute of 'EmployeeAdmin' of found in the model 'Employee'.

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) @property def name(self): return ''.join( [self.lastname,' ,', self.firstname, ' ', self.middlename]) 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)

解决方案

Ok... Daniel Roseman's answer seemed like it should have worked. As is always the case, you find what you're looking for after you post the question.

From the Django 1.5 docs I found this example that worked right out of the box. Thanks to all for your help.

Here is the code that worked:

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) def _get_full_name(self): "Returns the person's full name." return '%s, %s %s' % (self.lastname, self.firstname, self.middlename) full_name = property(_get_full_name) class Meta: ordering = ['lastname','firstname', 'middlename'] class EmployeeAdmin(admin.ModelAdmin): list_display = ('clocknumber','full_name') fieldsets = [("Name", {"fields":(("lastname", "firstname", "middlename"), "clocknumber")}), ] admin.site.register(Employee, EmployeeAdmin)

更多推荐

如何将计算字段添加到 Django 模型

本文发布于:2023-10-31 07:50:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1545486.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字段   如何将   模型   Django

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!