我正在写一个mixin,它可以让我的模型很容易地被转换成一个深层的值(有点像.values(),但是遍历关系).这些定义最清晰的地方似乎是模型本身,a la:

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中精心地覆盖这一点,但是有没有一种更优雅的方式来存储这些信息呢?

推荐答案

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

import django.db.models.options as options

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

很明显,如果Django添加了自己的"schema"属性,这一点就会被打破.但是嘿,这是一个 idea ...您总是可以 Select 一个不太可能冲突的属性名称.

Django相关问答推荐

模仿没有像预期的那样工作(Django)

Django-admin 显示decorator 按多列排序

源自访问外键关系的模型方法 get_absolute_url 的 django 重复 SQL 查询

根据当前对象中的多对多字段过滤对象

为什么在 Docker 映像中运行我的 Django 应用程序后下载属性不再起作用?

Django celery 页面给出 404

django 创建多种类型用户的最佳方法

Django 在模型中存储用户图像

Django基于类的视图上的success_url的反向抱怨循环导入

是否可以在没有模型的情况下创建自定义管理视图

删除所有实例后,Django 模型实例主键不会重置为 1

如何运行克隆的 Django 元素?

在 Django 中,您可以向查询集添加方法吗?

relation "django_site" does not exist

Ruby on Rails 会影响网页的外观吗?

Django 向用户推送 HTTP 响应

Django:显示在每个页面上加载页面所花费的时间

升级到 Django 1.8 后提供的固定默认值

Django Admin:如何在内联中显示模型上定义的属性?

ValueError: 无法解析相关模型 u'app.model'