Django模型,一对多关系及反向引用[如何]

8 投票
1 回答
10143 浏览
提问于 2025-04-18 16:44

我有一个数据库,里面用SQLAlchemy填充了一些对象,但我不知道怎么在Django中创建模型。

我需要Show对象通过关系来拥有Episode对象的数组。在数据库中,所有的Episode对象都有一个'show_title'列,而所有的Show对象都有'episodes'。

这些对象在SQLAlchemy中看起来是这样的,

   class AlphaShow(Base) :    
    __tablename__ = 'show' 
    title = Column(UnicodeText, primary_key = True)
    description = Column(UnicodeText)
    image = Column(UnicodeText)
    episodes = relationship("Episode", backref="show")
    def __init__(self,_meta) :
        self.title = _meta.title
        self.image = _meta.image
        self.description = _meta.description

class Episode (Base) : #was without base 
    __tablename__= 'episode'
    title = Column(UnicodeText, primary_key = True)
    link = Column(UnicodeText)
    show_title = Column(UnicodeText, ForeignKey('show.title'))

    def __init__(self, _title, _link) :
        self.title = _title
        self.link = _link

那我该如何在Django中创建这些模型呢?我试过这样做,但不管用,

class Shows(models.Model) :
    episodes = [] 
    title = models.TextField(primary_key=True)
    description = models.TextField()  
    image = models.TextField()
    class Meta:
        db_table = 'shows'
    def __str__(self):
        return self.title  


class Episode(models.Model) :

    title = models.TextField(primary_key=True)
    link = models.TextField()  
    show_title = models.ForeignKey(Shows)

    class Meta: 
        db_table = 'episodes'
    def __str__(self):
        return self.title 

我想我缺少的是,Django中对应SQLAlchemy的是什么。

episodes = relationship("Episode", backref="show")

任何帮助都将非常感谢,谢谢!

1 个回答

10

试试这个

class Shows(models.Model) :
    title = models.TextField(primary_key=True)
    description = models.TextField()  
    image = models.TextField()
    class Meta:
        db_table = 'shows'
    def __str__(self):
        return self.title  


class Episode(models.Model) :
    show = models.ForeignKey(Show, related_name="episodes")
    title = models.TextField(primary_key=True)
    link = models.TextField()  
    show_title = models.ForeignKey(Shows)

    class Meta: 
        db_table = 'episodes'
    def __str__(self):
        return self.title 

撰写回答