Django:多个表的单一模型

时间:2012-07-30 21:37:26

标签: django-models

我有一张主表 幻灯片 然后是一个特定于站点的表,它捕获该站点的一些额外细节。 Site1_Slideshow

在网络应用程序(特定于网站)中,我想要一个单独的模型,即幻灯片,它结合了上面的两个表格。 目前我有下面的代码,但我不认为这是正确的。我不能做像这样的事情 s = Slideshow.objects.get(slideshowId = 1),因为幻灯片只有属性featurecategory和幻灯片显示。那么我怎么能有一个名为Slideshow的模型,它由这两个表组成,但看起来像是一个单独的数据库表。

class SlideshowAbstract(models.Model):
    slideshowid = models.IntegerField(primary_key=True, db_column=u'SlideshowId') # Field name made lowercase.
    headline = models.TextField(db_column=u'Headline') # Field name made lowercase.
    class Meta:
        db_table = u'Slideshow'

class Slideshow(models.Model):
    slideshow = models.OneToOneField(SlideshowAbstract, primary_key=True,db_column=u'SlideshowId')
    def __unicode__(self):
        return self.slideshow.headline
    class Meta:
        db_table = u'Site1_Slideshow'

1 个答案:

答案 0 :(得分:0)

想想我找到了解决方案。 在Site1_Slideshow上,您需要为django添加一个要使用的列,我认为该列始终与主键值相同。 它的名字是SlideshowAbstract_ptr_id 添加后,您可以将幻灯片模型更改为

class Slideshow(SlideshowAbstract):
   featureCategory = models.ForeignKey(Featurecategory,db_column=u'FeatureCategoryId')
def __unicode__(self):
    return self.headline
class Meta:
    db_table = u'Site1_Slideshow'

如果你没有做“模型优先”并且已经拥有架构,那么可行但不是最好的。能够覆盖_ptr_id列的名称会很好。

我确实尝试将以下内容添加到幻灯片中,看看我是否可以将此ptr col映射到主键     slideshowabstract_ptr_id = models.IntegerField(primary_key = True,db_column = u'SlideshowId')

但没有雪茄。 我还没有测试插入,但是...... objects.all()工作