代码之家  ›  专栏  ›  技术社区  ›  Lemayzeur

在截止时间后锁定操作投票,在django中编辑投票实例时解锁

  •  1
  • Lemayzeur  · 技术社区  · 8 年前

    正如我在标题中所说,我希望允许用户对名为, Course 然后锁定投票 72小时 或 3天 (在我的例子中,需要2分钟)。我陷入困境的是,如果课程已经由所有者编辑,我想允许用户编辑投票当一个课程被编辑时,它的所有投票都必须被解锁。

    今天真糟糕,所有的逻辑都没有了,我想不出来了,已经撕下了好几张纸!

    到目前为止,我可以锁定投票,我是说我想我可以锁定它。

    ''' stuff '''
    if vote:
        NOW = datetime.datetime.now()
        DEADLINE = 2 # minutes
        if (NOW - course.date_edited).total_seconds() < (DEADLINE * 60):
            vote.amount = amount
            vote.save()
     else:
         vote = Vote.objects.create(
            user = user,
            amount = amount,
            content_object = course,
         )
    

    date_edited 对于这两种型号,设置为 auto_now_add = True 分贝

    我认为另一种方法是在编辑课程时编辑所有投票的日期,例如:

       course.votes.all().update(date_voted=....) # I am not sure
    

    告诉我怎么做。提前谢谢你!

    1 回复  |  直到 8 年前
        1
  •  1
  •   Lemayzeur    8 年前

    你可以设定 auto_now=True 对于 date_voted 字段和添加 date_vote_created 具有 auto_now_add=True 是的。在您看来,检查课程是否在此日期之后更改:

    if vote:
        NOW = datetime.datetime.now()
        DEADLINE = 2 # minutes
        if course.date_edited > vote.date_voted or (NOW - vote.date_vote_created).total_seconds() < (DEADLINE * 60):
            vote.amount = amount
            vote.save()
    

    升级版

    若要在课程更改后解锁投票两分钟,您可以重置 投票创建日期 分开的 if 阻碍。

    if vote:
        NOW = datetime.datetime.now()
        DEADLINE = 2 # minutes
        if course.date_edited > vote.date_voted:
            vote.date_vote_created = NOW
            vote.save()
        if course.date_edited > vote.date_voted or (NOW - vote.date_vote_created).total_seconds() < (DEADLINE * 60): 
            vote.amount = amount
            vote.save()
    

    升级版2

    if course.date_edited > vote.date_voted:
        vote.amount = amount
        vote.date_vote_created = NOW
        vote.save()
    elif (NOW - vote.date_vote_created).total_seconds() < (DEADLINE * 60): 
        vote.amount = amount
        vote.save()
    else:
        print("Vote locked")