代码之家  ›  专栏  ›  技术社区  ›  Chris

外键有问题

  •  1
  • Chris  · 技术社区  · 7 年前

    所以我的问题是在这段代码的最底层,它说“对于查询中的b”。目标是,如果人们对另一个人的帖子发表了评论,那么将所有评论的用户名和内容显示在主帖子上。错误是peewee。操作错误:没有这样的表:user。它可以很好地打印i.content,但当我尝试打印b.user.username时,会抛出错误。

    import datetime
    
    from peewee import *
    
    
    db = SqliteDatabase('practice2.db')
    
    
    class User(Model):
        """creates the database attributes"""
        username = CharField(unique=True)
        email = CharField(unique=True)
        password = CharField(max_length=100)
        joined_at = DateTimeField(default=datetime.datetime.now)
    
        class Meta:
            """creates the database"""
            database = db
    
    class Post(Model):
        """creates the database attributes"""
        timestamp = DateField(default=datetime.date.today)
        user = ForeignKeyField(
            rel_model=User,
            related_name='posts'
        )
    
        title = TextField()
    
        content = TextField()
    
        resources_to_remember = TextField()
    
        time_spent = TextField()
    
        tags = TextField()
    
        class Meta:
            """creates the database"""
            database = db
    
    class CommentPost(Model):
        timestamp = DateField(default=datetime.date.today)
        user = ForeignKeyField(
            rel_model=User,
            related_name='user_posts'
        )
        related_post = ForeignKeyField(
            rel_model = Post,
            related_name = 'com_posts')
    
        content = TextField()
    
    
    def initialize():
        """connects to the database"""
        db.connect()
        db.create_tables([User, Post, CommentPost], safe=True)
    
    def practice():
        try:
            w = User.create(username="George", email="george@gmail.com", password="KLJSklsjdfkald")
            f_int = User.get(username="George")
            r = Post.create(user= f_int.id, title="My First Post", content="So yeah this is my first post I think it is good.", resources_to_remember="wikipedia", time_spent="23 minutes", tags="hobbies")
            s = Post.create(user= f_int.id, title="My Second Post", content="So yeah this is my second post I think it is good.", resources_to_remember="brittanica", time_spent="24 minutes", tags="hobbies")
            v = CommentPost.create(user=w.id, related_post=r.id, content="Hey, see you tomorrow.")
    
    
        except IntegrityError:
            pass
        else:
            print("it worked")
            print("")
    
        a = Post.get(Post.title=="My First Post")
        for i in a.com_posts:
            print(i.content)
            query = CommentPost.select(CommentPost, User).join(User).where(CommentPost.content == i.content)
            for b in query:
                print(b.user.username)
                print("")
    
    if __name__ == '__main__':
        initialize()
        practice()
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Nir Alfasi    7 年前

    您忘记添加:

    class Meta:
            """creates the database"""
            database = db
    

    课堂内: CommentPost