我使用的是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'这可以很好地显示在管理更改列表页面上。但是额外的字段不在db级别。它是在程序设计一级生成的。Django为每个模型对象请求它。
这给我带来了一些麻烦。我的所有管理change list页面具有导出作为excel或其他类型的能力。我正在使用admin查询集来构建该报告。我还有jasper机制,它可以处理SQL选择查询。因此,我想使用queryset来接受这个select查询。
我认为能够在db级别上定义额外的字段对于某些事情很重要。不只是因为我的原因。所以,关于这一切的问题。
是否有一种方法在db级别上定义额外的自定义字段,而不是在Django中定义编程级别的。
谢谢你!
编辑过的
将它添加到管理list_filter也是另一个问题,如果它不是一个真正的字段。Django不允许您添加它。
发布于 2014-05-01 21:11:40
您能否创建一个新的数据库字段,然后重写保存方法以填充该字段?我经常这样做,以创建一个标记版本的文本字段。例如:
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)https://stackoverflow.com/questions/23416569
复制相似问题