访问Django关系中的子对象

时间:2013-11-08 20:30:33

标签: django

编辑:我非常想在不安装第三方应用的情况下完成此任务。看起来很简单/普通,有人会发布一行代码来实现这一目标吗? 无法在SQL中轻松完成此操作?在索引视图中使用自定义SQL命中数据库会不会是禁忌?

所以我有一个父类和两个子类。我想查询所有项目并返回快速列表。

from django.db import models

VIDEO_TYPE_CHOICES = (
    ('dvd', 'DVD'),
    ('downloaded', 'Downloaded'),
)

BOOK_TYPE_CHOICES = (
    ('e_book', 'E-Book'),
    ('print', 'Print'),
    ('audio', 'Audio Book'),
)


class Unit(models.Model):
    name = models.CharField(max_length=200)
    image = models.ImageField()

    def __unicode__(self):
        return self.name

class Video(Unit):
    this_type = models.CharField(max_length=20, choices=VIDEO_TYPE_CHOICES, default='dvd')
    run_time = models.CharField(max_length=200)

class Book(Unit):
    this_type = models.CharField(max_length=20, choices=BOOK_TYPE_CHOICES, default='print')
    pages = models.CharField(max_length=200)

我想要做的就是显示所有"单位"在我的索引页面上有this_type。[/ p>

如:

Lord Of The Rings,lotr.jpeg,DVD

Treasure Island,treasure_island.jpeg,Print

但是,如果我执行标准" gimme所有单位"我只能访问单位名称和图像属性。查询...不是this_type。当然,除非我对该对象做出假设,并尝试使用object.book.this_type例如......如果该特定对象不是Book,则抛出异常。

我已经研究了一段时间了......虽然我可以找到几个相关问题和几种可能的方法(例如通用关系?),但我找不到一个可以与我联系的例子自己的用例......或完全了解这件事。我现在只有这个东西(Python和Django)大约一个星期......我学得最好的时候我可以做一些工作,了解所有运动部件,然后建立在这种理解的基础上。

有鉴于此,如果有人能给我一个如何生成前面提到的对象列表的例子,我将非常感激!

漂亮的PLS ???

1 个答案:

答案 0 :(得分:0)

我建议使用django app model_utils

OOP通常不是模型的最佳设计模式,但是如果你要去那条路线,那么model_utils会有一个InheritanceManager,它完全符合你的要求。