実現したいこと
生産者とお客を結ぶSNSを作りたいです。
生産者とお客のモデルは別々に作成しています。
<機能>
生産者はログイン後、新規投稿、更新、削除ができる。
発生している問題・分からないこと
生産者としてログインしているのにもかかわらず、生産者としてログインしていることが判断できていません。
エラーメッセージ
error
1新規投稿ボタンを押すと「生産者としてログインしてください」のメッセージが表示されます
該当のソースコード
models.py
1# お客のモデルクラス 2class Customer(db.Model, UserMixin): 3 __tablename__ = 'customer' 4 5 id = db.Column(db.Integer, primary_key=True) 6 username = db.Column(db.String(100), nullable=False) 7 email = db.Column(db.String(120), unique=True, nullable=False) 8 password_hash = db.Column(db.String(128), nullable=False) 9 buyer_profile = db.Column(db.Text, nullable=True) 10 created_at = db.Column(db.DateTime, nullable=False, default=datetime.now(tokyo_timezone)) 11 updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now(tokyo_timezone), onupdate=datetime.now(tokyo_timezone)) 12 13 def set_password(self, password): 14 self.password_hash = generate_password_hash(password) 15 16 def check_password(self, password): 17 return check_password_hash(self.password_hash, password) 18 19 @property 20 def is_farmer(self): 21 return False # Customer には生産者のフラグは False に設定 22 23 24# 生産者のモデルクラス 25class Farmer(db.Model, UserMixin): 26 __tablename__ = 'farmer' 27 28 id = db.Column(db.Integer, primary_key=True) 29 username = db.Column(db.String(100), nullable=False) 30 email = db.Column(db.String(120), unique=True, nullable=False) 31 password_hash = db.Column(db.String(128), nullable=False) 32 farmer_profile = db.Column(db.String(1000), nullable=False) 33 created_at = db.Column(db.DateTime, nullable=False, default=datetime.now(tokyo_timezone)) 34 updated_at = db.Column(db.DateTime, nullable=False, default=datetime.now(tokyo_timezone), onupdate=datetime.now(tokyo_timezone)) 35 36 products = db.relationship('Product', back_populates='farmer', cascade='all, delete-orphan') 37 38 def set_password(self, password): 39 self.password_hash = generate_password_hash(password) 40 41 def check_password(self, password): 42 return check_password_hash(self.password_hash, password) 43 44 @property 45 def is_farmer(self): 46 return True # Farmer には生産者のフラグを True に設定
views.py
1@marche_bp.route('/create', methods=['GET', 'POST']) 2@login_required 3def create(): 4 if not current_user.is_farmer: # current_userが生産者でない場合、エラーメッセージを表示 5 flash("生産者のアカウントでログインしてください", "danger") 6 return redirect(url_for('marche.index')) 7 8 if request.method == 'POST': 9 product_name = request.form.get('product_name') 10 detail = request.form.get('detail') 11 file = request.files.get('img_name') 12 13 if file: 14 filename = file.filename 15 save_path = os.path.join('static', 'images', filename) 16 file.save(save_path) 17 else: 18 filename = 'default.jpg' 19 20 post = Product(product_name=product_name, detail=detail, img_name=filename, farmer_id=current_user.id) 21 db.session.add(post) 22 db.session.commit() 23 24 flash("登録しました", "success") 25 return redirect(url_for('marche.lists')) 26 27 return render_template("marche/create.html") 28
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
ChatGPTも使って修正しましたが、解決できませんでした。
補足
Flask==3.1.0
生産者とお客のモデルをそれぞれ別に作っていますが、Userのモデルは1つにした方がいいのでしょうか?

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。