2017-07-20 7 views
1

私の問題は、このコードの最下部にある "for b in query"です。目標は、他の人の投稿にコメントした場合、すべてのコメントのユーザー名と内容をメインポストに表示することです。エラーはpeewee.OperationalErrorです:そのようなテーブルはありません:ユーザー。それは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="[email protected]", 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() 
+0

コードを送信して問題のある行を指摘しても問題は何かを正確に説明する必要があります。それはエラーですか?もしそうなら、正確に何を言っているのですか?タイトルは説明には適していません。 – alfasin

+0

よろしくお願いいたします。私は説明を更新しました。 – Chris

答えて

1

あなたは追加するのを忘れ:

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

をクラス内:CommentPostので、それが作成されませんでした。

+0

ああ、申し訳ありませんが、それは私が疲れてみるために得るものです。どうもありがとう :) – Chris

関連する問題