经过大量搜索,只找到了一些可以让我做到这一点的技术(而且工作示例更少),我把它带给你。
以下是类似于我正在使用的类结构:
# sources/models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=256)
slug = models.SlugField()
class Source(models.Model):
author = models.ForeignKey(Author)
url = models.URLField(help_text='The URL where a copy of the source can be found.')
class Book(Source):
title = models.CharField(max_length=256)
page = models.PositiveSmallIntegerField(help_text='Page where the source text appears.')
class MagazineArticle(Source):
magazine_name = models.CharField(max_length=256)
issue_date = models.DateField()
title = models.CharField(max_length=256)
在一个单独的应用程序中,我会有这个:
# excerpts/models.py
from django.db import models
from sources.models import Source
class Excerpt(models.Model):
excerpt = models.TextField()
source = models.ForeignKey(Source)
# Perhaps should be:
# source = models.OneToOneField(Source)
问题是在管理员中,我希望能够创建 aBook
或 aMagazineArticle
作为摘录的来源,而无需在每个摘录中都有单独的字段。
我读过的一种可能可行的方法是泛型关系,可能使用抽象基类,但我没有找到任何在我的上下文中有意义的示例。
执行此操作的方法有哪些(最好带有示例)?