我是Flask的新手,因此在遇到障碍时希望获得一些帮助。
目标:我需要用户能够每两周登录并完成一次调查。他们将完成相同的调查,我需要能够区分在第1周,第2周等中完成了哪个调查。每个用户将在不同的日期完成调查,因为他们是从加入之日起两周,而不是所有人都在完全相同的日期进行调查。
我当前的思维过程:我在我的models.py中为User创建了一个类,为Survey创建了一个类,并将它们与db.relationship()列连接起来。我有一个用户填写的wtf表格(字段对应于调查类中的属性)。如果有帮助,请参见以下代码:
from project import db,login_manager
from werkzeug import generate_password_hash, check_password_hash
from flask_login import UserMixin
from datetime import datetime
@login_manager.user_loader
def load_user(user_id):
return User.query.get(user_id)
class User(db.Model, UserMixin):
__tablename__ = 'users'
#columns of database
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String, unique=True, index=True)
username = db.Column(db.String, unique=True, index=True)
password_hash = db.Column(db.String(128))
survey = db.relationship('Survey', backref='respondee', lazy=True)
def __init__(self, email, username, password):
self.email= email
self.username = username
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
def __repr__(self):
return f"Username {self.username}"
class Survey(db.Model):
users = db.relationship(User)
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
# what the respondee needs to provide when completing the questionnaire (not finished as I'm waiting on the actual questions at the moment
def __init__(self, user_id, )
这可能不是正确的逻辑,但我不确定最好的方法是什么。
将感谢有人为我指出以下正确的方向
我是正确的,认为Survey()类列应反映烧瓶形式的问题
鉴于同一调查将由用户每两周完成一次,因此区分每项调查的最佳方法是什么?用户将在加入后的两个星期内的不同日期完成调查。
谢谢大家。
答案 0 :(得分:0)
您已经将每个调查的创建日期时间保存在Survey.date中。您只需要向User添加一个相同的字段即可节省每个用户的创建时间。然后,您可以执行简单的日期算术,以找出每个调查对应的两个星期时间点。
days_since_registration = (survey.date.date() - user.date.date()).days
weeks_since_registration = round(days_since_registration / 7.0)