1

我有一个主表格幻灯片,然后是一个特定于站点的表格,该表格捕获了该站点的一些额外详细信息。Site1_幻灯片

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

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'
4

1 回答 1

0

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

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() 有效

于 2012-07-31T20:33:56.590 回答