详细信息:
我有一个教师仪表板,教师可以在其中与其他教师一起创建和分享工作表。当任何工作表与其他教师共享时,他们可以(但不是必须)提供该工作表的反馈,工作表的创建者可以看到该反馈。
现在我有一个存储此共享内容的模型如下:
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天后被认定为批准。
有类似的问题,但对于投票,数据库中没有先前的条目,您可以查找。在我的情况下,已经创建了一个条目,因此我无法使用该概念。
答案 0 :(得分:1)
使用OneToOneField
到SharingWS
创建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)
如果存在以下记录,请检查条件:
shared_by
- 工作表的所有者shared_with
- 分享他意见的老师worksheet
- 特定工作表如果存在,则意味着特定教师分享了他的意见。期 例如这样的查询:
SharingWS.objects.get(shared_by=Bob, shared_with=John, worksheet=BobsWorksheet)
查找John对Bob的工作表的看法。如果此查询返回对象,则表示John无法分享其他意见,您应该为他禁用它。
答案 2 :(得分:0)
根据@Nihal和@Adam的提示,我解决了以下问题。
由于我已经从TimeStampWS
继承,因此我添加了一个新字段last_updated
和created_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_at
和last_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'))