Возникли проблемы с внешним ключом
Так что моя проблема в самом низу этого кода, где написано "для b в запросе". Цель состоит в том, чтобы, если люди прокомментировали пост другого человека, отобразить имена пользователей и содержание всех комментариев к основному посту. Ошибка 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="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 ответ
Решение
Вы забыли добавить:
class Meta:
"""creates the database"""
database = db
внутри класса: CommentPost
так что это не было создано.