Создание опроса в Flask - PullRequest
       51

Создание опроса в Flask

0 голосов
/ 15 апреля 2019

Я новичок во Фляске, поэтому надеялся на некоторую помощь, когда наткнулся на дорожный блок.

Цель: мне нужно, чтобы пользователи могли входить в систему и проходить опрос каждые две недели. Это будет тот же опрос, который они проведут, и мне нужно будет иметь возможность различить, какой опрос был проведен на неделе 1, неделе 2 и т. Д. Каждый пользователь завершит опрос в другую дату, так как это две недели с момента его присоединения, а не все, кто завершает опрос. опрос на точно такую ​​же дату.

Мой текущий мыслительный процесс: я создал один класс для пользователя и один класс для опроса в моем models.py и соединил их столбцом 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, )

Возможно, это не правильная логика, но я не уверен, что лучший способ.

Буду признателен, если кто-то направит меня в правильном направлении относительно:

  1. Правильно ли я считаю, что столбцы класса Survey () должны отражать вопросы формы Flask

  2. Учитывая, что пользователи будут проводить один и тот же опрос каждые две недели, каков наилучший способ провести различие по завершении каждого опроса. Пользователи будут заполнять опрос в разные даты, так как через две недели они присоединятся.

Спасибо, ребята.

1 Ответ

0 голосов
/ 20 апреля 2019

Вы уже сохраняете дату создания каждого опроса в Survey.date. Вам просто нужно добавить идентичное поле для пользователя, чтобы сэкономить время создания каждого пользователя. Затем вы можете выполнить простую арифметику дат, чтобы узнать, какому двухнедельному моменту времени соответствует каждый опрос.

days_since_registration = (survey.date.date() - user.date.date()).days
weeks_since_registration = round(days_since_registration / 7.0)
...