私の問題は、このコードの最下部にある "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()
コードを送信して問題のある行を指摘しても問題は何かを正確に説明する必要があります。それはエラーですか?もしそうなら、正確に何を言っているのですか?タイトルは説明には適していません。 – alfasin
よろしくお願いいたします。私は説明を更新しました。 – Chris