0

编辑:我非常想在不安装第 3 方应用程序的情况下完成此操作。看起来很简单/很常见,以至于现在有人会发布一行代码来完成此操作?这不能在 SQL 中轻松完成吗?在索引视图中使用自定义 SQL 访问数据库会不会是禁忌?

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

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 的所有“单位”的列表。

如:

指环王,lotr.jpeg,DVD

金银岛,treasure_island.jpeg,打印

但是,如果我执行标准的“给我所有单位”查询...而不是 this_type,我只能访问单位名称和图像属性。当然,除非我对对象做出假设并尝试 object.book.this_type 例如...如果该特定对象不是书,则会引发异常。

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

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

漂亮的PLS???

4

1 回答 1

0

I would recommend using the django app model_utils

OOP is generally not the best design pattern for models but if you are going to go that route model_utils has an InheritanceManager which does exactly what you want.

于 2013-11-08T20:50:49.950 回答