2011-02-02 37 views
1

假设我在我的Django项目中有两个模型。Django - 将具有不同外键的审批子类合并为一个类

class Project(models.Model): 
    name = models.CharField(max_length=256) 

class Forecast(models.Model): 
    name = models.CharField(max_length=256) 
    project = models.ForeignKey(Project) 

我想建立一个独立的应用程序的审批模式,让我满足以下两个批准的子类组合:

class ProjectApproval(models.Model): 
    approver = models.ForeignKey(User) 
    approved_object = models.ForeignKey(Project) 

class ForecastApproval(models.Model): 
    approver = models.ForeignKey(User) 
    approved_object = models.ForeignKey(Forecast) 

到更多的东西通用的,如:

class Approval(models.Model): 
    user = models.ForeignKey(User) 
    approved_object = [whatever I want ... a Project, a Forecast, a Checkbook, a Plan] 

是这可能吗?

感谢,

迈克

回答

1

当然可以,Django的有通用的关系:)

对Django文档看看

实现的一个例子是以下几点:

from django.contrib.contenttypes import generic 
from django.contrib.contenttypes.models import ContentType 

class Approval(models.Model): 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 
+0

哇,我经历了一个n整本教程书籍,并从未接触过这个。感谢您指出它.. – MikeRand 2011-02-02 18:49:08

相关问题