在Django模型的元类中添加属性

2024-05-15 23:40:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个mixin,它可以让我的模型很容易地被转换成一个很深的值(类似于.values(),但是遍历关系)。最干净的地方做这些定义似乎是在模型本身,洛杉矶:

class Person(models.Model, DeepValues):
    name = models.CharField(blank=True, max_length=100)
    tribe = models.ForeignKey('Tribes')

    class Meta:
        schema = {
            'name' : str,
            'tribe' : {
                'name' : str
            }
        }

Person.objects.all().deep_values() => {
    'name' : 'Andrey Fedorov',
    'tribe' : {
        'name' : 'Mohicans'
    }
}

然而,Django抱怨我在class Meta中包含了这个:

TypeError: 'class Meta' got invalid attribute(s): schema

(整个堆栈跟踪here

现在,我想我可以在我的mixin中精心地重写它,但是有没有更优雅的方法来存储这些信息呢?


Tags: name模型定义关系modelsschema地方mixin
1条回答
网友
1楼 · 发布于 2024-05-15 23:40:54

我不知道优雅,但有一个实用的方法是:

import django.db.models.options as options

options.DEFAULT_NAMES = options.DEFAULT_NAMES + ('schema',)

显然,如果Django添加了自己的“schema”属性,这将中断。但是,嘿,这是一个想法……你总是可以选择一个不太可能冲突的属性名。

相关问题 更多 >