我是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.date中保存每个调查的创建日期时间。您只需向User添加一个相同的字段即可节省每个用户的创建时间。然后,您可以执行简单的日期算术,以找出每个调查对应的两周时间点。
days_since_registration = (survey.date.date() - user.date.date()).days
weeks_since_registration = round(days_since_registration / 7.0)