继承admin.ModelAdmin可以自动生成此model一个管理界面,包括listview(列表),和detailview(详情)两部分,用于展示和编辑模型的属性。
但比如我现在有一个Person模型,他的生日是存到数据库中的,但是年龄并不存,因为可以通过今天计算出来,所以它虽不在数据库中,但也算是模型的一个属性,那么在django中如何写一个这样的属性?,一个“非存储属性”,能在操作模型的时候使用,用起就像就像普通属性一样,也能够挂到admin的列表页和详情页上?
继承admin.ModelAdmin可以自动生成此model一个管理界面,包括listview(列表),和detailview(详情)两部分,用于展示和编辑模型的属性。
但比如我现在有一个Person模型,他的生日是存到数据库中的,但是年龄并不存,因为可以通过今天计算出来,所以它虽不在数据库中,但也算是模型的一个属性,那么在django中如何写一个这样的属性?,一个“非存储属性”,能在操作模型的时候使用,用起就像就像普通属性一样,也能够挂到admin的列表页和详情页上?
admin可以这样调用?哈哈,我曾经掉到一个坑里,分享下,自己在model层创建了一个相应的“非存储属性”,然后想通过ORM用正常属性的方式进行filter等操作,发现不行~~~~
可以在“列表”页面添加。
参考django admin文档中的ModelAdmin.list_display
的相关内容。
http://python.usyiyi.cn/trans...
# 一个接受对象实例作为参数的可调用对象。 像这样:
def upper_case_name(obj):
return ("%s %s" % (obj.first_name, obj.last_name)).upper()
upper_case_name.short_description = 'Name'
class PersonAdmin(admin.ModelAdmin):
list_display = (upper_case_name,)
# 一个表示ModelAdmin 中某个属性的字符串。 行为与可调用对象相同。 像这样:
class PersonAdmin(admin.ModelAdmin):
list_display = ('upper_case_name',)
def upper_case_name(self, obj):
return ("%s %s" % (obj.first_name, obj.last_name)).upper()
upper_case_name.short_description = 'Name'
# 表示模型中某个属性的字符串。 它的行为与可调用对象几乎相同,
# 但这时的self 是模型实例。 这里是一个完整的模型示例︰
from django.db import models
from django.contrib import admin
class Person(models.Model):
name = models.CharField(max_length=50)
birthday = models.DateField()
def decade_born_in(self):
return self.birthday.strftime('%Y')[:3] + "0's"
decade_born_in.short_description = 'Birth decade'
class PersonAdmin(admin.ModelAdmin):
list_display = ('name', 'decade_born_in')
'''
Django 会尝试以下面的顺序解释list_display 的每个元素︰
- 模型的字段。
- 可调用对象。
- 表示ModelAdmin 属性的字符串。
- 表示模型属性的字符串。
'''
在控制“详情”页面内容的设置ModelAdmin.fieldsets
、ModelAdmin.fields
中没有发现相关功能
4 回答4.5k 阅读✓ 已解决
1 回答3.3k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.9k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
直接在 model 中创建计算生日的方法,然后在 admin 里面调用就可以了。