質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

174閲覧

ログインユーザーの役割を判別し、新規登録できるようにしたい。

kotatsu2

総合スコア17

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

2クリップ

投稿2025/04/06 14:15

実現したいこと

生産者とお客を結ぶ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つにした方がいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
Login関数で生産者とお客の判定ができていませんでした。
Login関数を修正後、無事に動くようになりました。

投稿2025/04/07 14:32

kotatsu2

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問