【问题标题】:Django models, one to many relationship with back reference [how]Django模型,与反向引用的一对多关系[如何]
【发布时间】:2014-10-03 11:23:39
【问题描述】:

我有一个使用 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")

任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: python django django-models sqlalchemy


    【解决方案1】:

    试试这个

    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 
    

    【讨论】:

    • 所以这似乎有效,但不是真的,当我尝试说 s = Shows.objects.all() print(s[0].episodes[0].title) 它返回一个错误,说“RelatedManager”对象不支持索引??
    • s[0] 给你什么? s[0].episodes 带给你什么?
    • s[0].episodes 给了我一个 RelatedManger 对象,我读到我可以只使用 .all() 而不是将它视为一个列表,但它给了我一个错误“关系”剧集“不存在”,我认为问题是 Django 正在将 _id 添加到所有内容中,所以它不是 show_title 它变成了 show_title_id
    • s[0] 给了我节目的标题,因为它应该....不断收到此错误,即使删除“_id”后关系也不存在不明白
    • 你能告诉我你的桌子的结构吗?是的,你必须这样做s[0].episodes.all()[0].title
    猜你喜欢
    • 2013-06-12
    • 2012-07-28
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 2022-06-22
    • 2018-05-21
    • 2016-09-15
    • 2012-12-22
    相关资源
    最近更新 更多