允许用户在django中编辑一次

时间:2018-03-06 12:06:39

标签: python django

详细信息:

我有一个教师仪表板,教师可以在其中与其他教师一起创建和分享工作表。当任何工作表与其他教师共享时,他们可以(但不是必须)提供该工作表的反馈,工作表的创建者可以看到该反馈。

现在我有一个存储此共享内容的模型如下:

class SharingWS(TimeStampWS):
    shared_by = models.ForeignKey('members.Profile', on_delete=models.CASCADE, related_name='shared_by')
    shared_with = models.ForeignKey('members.Profile', on_delete=models.CASCADE, related_name='shared_with')
    worksheet = models.ForeignKey('WorkSheet', on_delete=models.SET_NULL, null=True)
    flag = models.BooleanField()
    reason = models.TextField(blank=True)

创建工作表后,会立即在模型中创建一个带有默认flag=True的条目。

问题

现在,我如何才能让 一次机会让其他教师查看工作表。一旦他们给出了反馈,他们就不能再做了,如果他们不反馈,将在2天后被认定为批准。

有类似的问题,但对于投票,数据库中没有先前的条目,您可以查找。在我的情况下,已经创建了一个条目,因此我无法使用该概念。

3 个答案:

答案 0 :(得分:1)

使用OneToOneFieldSharingWS创建Feedback模型。现在,您可以按SharingWS创建最多一个class SharingWS(TimeStampWS): shared_by = models.ForeignKey('members.Profile', on_delete=models.CASCADE, related_name='shared_by') shared_with = models.ForeignKey('members.Profile', on_delete=models.CASCADE, related_name='shared_with') worksheet = models.ForeignKey('WorkSheet', on_delete=models.SET_NULL, null=True) class Feedback(models.Model): sharing_ws = models.OneToOneField('app_name.SharingWS', on_delete=models.CASCADE, related_name='feedback') flag = models.BooleanField() reason = models.TextField(blank=True) 个实例,如下所示:

    for (int i = dt.Rows.Count - 1; i >= 0; i--)
    {

      if (dt.Rows[i]["col1"] == DBNull.Value || dt.Rows[i]["col2"] == DBNull.Value)
      {
           dt.Rows[i].Delete();
      }
    }

答案 1 :(得分:0)

如果存在以下记录,请检查条件:

  1. shared_by - 工作表的所有者
  2. shared_with - 分享他意见的老师
  3. worksheet - 特定工作表
  4. 如果存在,则意味着特定教师分享了他的意见。期 例如这样的查询:

    SharingWS.objects.get(shared_by=Bob, shared_with=John, worksheet=BobsWorksheet)
    

    查找John对Bob的工作表的看法。如果此查询返回对象,则表示John无法分享其他意见,您应该为他禁用它。

答案 2 :(得分:0)

根据@Nihal和@Adam的提示,我解决了以下问题。

由于我已经从TimeStampWS继承,因此我添加了一个新字段last_updatedcreated_at。现在我的模型看起来如下:

class TimeStampWS(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    last_updated = models.DateTimeField(auto_now=True)

class SharingWS(TimeStampWS):
    shared_by = models.ForeignKey('members.Profile', on_delete=models.CASCADE, related_name='shared_by')
    shared_with = models.ForeignKey('members.Profile', on_delete=models.CASCADE, related_name='shared_with')
    worksheet = models.ForeignKey('WorkSheet', on_delete=models.SET_NULL, null=True)
    flag = models.BooleanField()
    reason = models.TextField(blank=True)

现在,因为只要创建工作表,其created_atlast_updated时间将以毫秒或最大秒为单位。所以我只是用日期,小时和分钟来比较老师是否提供了反馈,这是我的逻辑部分:

<强> views.py

def worksheet_review(request, id_r):
    current_time = timezone.now().replace(second=0, microsecond=0)

    if request.method=='POST':
        # got desired ShareWS object here
--->    creation_time = share_instance.created_at.replace(second=0,microsecond=0)
--->    modification_time = share_instance.last_updated.replace(second=0,microsecond=0)

        if creation_time==modification_time:
            # adding extra fields in the object
            share_instance.save()
            return HttpResponseRedirect(reverse('worksheet:worksheet_review_success'))

        elif current_time - creation_time > datetime.timedelta(days=2):
            return HttpResponseRedirect(reverse('worksheet:worksheet_review_once'))