当前位置: 首页 > 面试题库 >

Django代理模型和ForeignKey

茅高卓
2023-03-14
问题内容

如何使entry.category成为CategoryProxy的实例?有关详细信息,请参见代码:

class Category(models.Model): pass

class Entry(models.Model):
    category = models.ForeignKey(Category)

class EntryProxy(Entry):
    class Meta:
        proxy = True

class CategoryProxy(Category):
    class Meta:
        proxy = True

entry = EntryProxy.objects.get(pk=1)
entry.category # !!! I want CategoryProxy instance here

从Category转换为CategoryProxy也是可以的,但是我对ORM内部结构以正确复制内部状态不是很熟悉…

编辑。 原因:我向CategoryProxy添加了方法,并想使用他:

EntryProxy.objects.get(pk=1).category.method_at_category_proxy()

编辑2. 目前,我是这样实现的:

EntryProxy._meta.get_field_by_name('category')[0].rel.to = CategoryProxy

但是看起来很糟糕…


问题答案:

在不访问数据库的情况下从模型类切换到代理类:

class EntryProxy(Entry):
    @property
    def category(self):
        new_inst = EntryProxy()
        new_inst.__dict__ = super(EntryProxy, self).category.__dict__
        return new_inst

编辑:上面的代码片段似乎不适用于django 1.4。

从Django 1.4开始,我像这样手动获取所有值字段:

class EntryProxy(Entry):
    @property
    def category(self):
        category = super(EntryProxy, self).category
        new_inst = EntryProxy()
        for attr in [f.attname for f in category.__class__._meta.fields] + ['_state']:
            setattr(new_inst, attr, getattr(category, attr))
        return new_inst

要从查询集切换到子代理类而不打数据库:

class CategoryProxy(Category):
    @property
    def entry_set(self):
        qs = super(CategoryProxy, self).entry_set
        qs.model = EntryProxy
        return qs


 类似资料:
  • 主要内容:,创建模型,操作数据(CRUD),其他数据操作,,链接模型模型是表示我们的数据库表或集合类,并且其中所述类的每个属性是表或集合的字段。模型是在 app/models.py 中定义(在我们的例子中是:myapp/models.py) 创建模型 下面是创建一个 Dreamreal 模型实例 − 每一个模型继承自django.db.models.Model。 我们类有4个属性(3 CharField和1个整数),这将是表中的字段。 Meta类与db_table

  • 我们现在将要创建的是一个能存储我们博客所有文章的东西。为了达到这个目的,我们将要讲解一下一个被称为objects(对象)的东西. 对象 在编程中有一个概念叫做 面向对象编程 。 它的思想是,与其用无聊的一连串的程序指令方式写程序,我们不如为事物建立模型,然后定义他们是怎样互相交互的。 那什幺是对象呢?它是一个属性和操作的集合。它听起来很奇怪,但我们会给你一个例子。 如果我们想塑造一只猫的模型,我们

  • Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。 Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。 MySQL 是 Web 应用中最常用的数据库。本章节我们将以 Mysql 作为实例进行介绍。你可以通过本站的 MySQL 教程 了解更多Mysql的基础知识。 如果你没安装 mysql 驱动

  • 问题内容: 在要显示已注册模型的管理站点的根页面上,我想隐藏已注册到Django admin的多个模型。 如果我直接注销这些记录,由于添加新符号“ +”消失了,因此我无法添加新记录。 如何才能做到这一点 ? 问题答案: 基于x0nix的答案,我做了一些实验。似乎从返回空会将模型从index.html中排除,同时仍然允许你直接编辑实例。

  • 有人有一个通用的例子吗?通过看到这样的例子,一定会明白我们真的需要使用代理模式吗

  • 朴素贝叶斯法 朴素贝叶斯(native Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法。 对于给定的训练集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对于给定的输入$$x $$,利用贝叶斯定理求出后验概率最大的输出$$y$$。 基本方法 假设输入空间$$\mathcal{X}\subseteq Rn$$为$$n$$维向量的集合,输出空间为类标记集合$$\ma