1

メイン テーブルのスライドショーに続いて、そのサイトの追加の詳細をキャプチャするサイト固有のテーブルがあります。Site1_Slideshow

Web アプリ (サイトに固有) では、上記の 2 つのテーブルを組み合わせた単一のモデル、つまりスライドショーが必要です。現在、私は以下のコードを持っていますが、これが正しいとは思いません。Slideshowsにはfeaturecategoryとslideshowのプロパティしかないため、s = Slideshow.objects.get(slideshowId=1)のようなことはできません。では、これらの 2 つのテーブルで構成されているが、単一の db テーブルのように見える 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'
4

1 に答える 1

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 列の名前をオーバーライドできるとよいでしょう。

以下をSlideshowに追加してみましたが、このptr colを主キーslideshowabstract_ptr_id = models.IntegerField(primary_key=True, db_column=u'SlideshowId')にマップできるかどうかも確認してください

しかし葉巻はありません。挿入もテストしていませんが、 ...objects.all() は機能します

于 2012-07-31T20:33:56.590 に答える