我正在使用Python 2.7
和Django 1.6.3
我想定义额外的模型字段,它实际上不在db表中。我有一种方法,用property
注释定义一个可调用的方法,如;
class MyClass(models.Model):
my_field = models.CharField(max_length=50)
@property
def my_extra_field(self):
return self.my_field+'extra value'
这可以在管理员更改列表页面上显示它。但额外的字段不在数据库级别。它是在编程级别生成的。 Django要求每个模型对象。
这给我带来了一些麻烦。我的所有管理员change list
页面都具有以excel或其他类型导出的功能。我正在使用管理查询集来构建该报告。我还有jasper报告机制,它适用于SQL
选择查询。所以,我想使用queryset
来获取此选择查询。
我认为能够在db级别定义额外字段对于某些事情很重要。不只是出于我的原因。所以,关于这一点的问题。
有没有办法在Django
中的 db级别而不是编程级别上定义额外的自定义字段。
谢谢!。
如果它不是真正的字段,那么将它添加到admin list_filter也是另一个问题。 Django不允许你添加它。
答案 0 :(得分:1)
您是否可以创建新的数据库字段,然后覆盖保存方法以填充该字段?我经常这样做来创建文本字段的标记版本。例如:
class Dummmy(models.Model):
content = models.TextField()
content_html = models.TextField(editable=False, null=True)
def save(self, *args, **kwargs):
self.content_html = markdown(self.content)
super(Dummmy, self).save(*args, **kwargs)
所以对你:
class MyClass(models.Model):
my_field = models.CharField(max_length=50)
my_extra_field = models.CharField(editable=False, null=True)
def save(self, *args, **kwargs):
self.my_extra_field = self.my_field + 'extra value'
super(MyClass, self).save(*args, **kwargs)