django - 如何找到日期时间字段与日期字段匹配但另一个字段为空的 ID?
问题描述
我有一个跟踪员工打卡/打卡应用程序的模型..
class ClockPunch(models.Model):
employee = models.ForeignKey(settings.AUTH_USER_MODEL)
date = models.DateField(auto_now_add=True)
punch_in_time = models.DateTimeField(blank=True, null=True)
punch_out_time = models.DateTimeField(blank=True, null=True)
hours_for_the_day = models.DecimalField(max_digits=4, decimal_places=2, default="0.00", blank=True, null=True)
class Meta:
ordering = ['date', ]
def __str__(self):
return self.pk
和 2 个视图,一个用于打卡,一个用于打卡...
class ClockPunchInView(LoginRequiredMixin, CreateView):
context_object_name = "clock_punch"
fields = ['punch_in_time']
model = ClockPunch
template_name = 'pages/layout.html'
success_url = '/'
def form_valid(self, form):
object = form.save(commit=False)
object.employee = self.request.user
object.punch_in_time = timezone.now()
object.save()
return super(ClockPunchInView, self).form_valid(form)
class ClockPunchOutView(LoginRequiredMixin, UpdateView):
context_object_name = "clock_punch"
model = ClockPunch
template_name = 'pages/layout.html'
def form_valid(self, form):
object = form.save(commit=False)
object.employee = self.request.user
object.punch_out_time = timezone.now()
object.save()
return super(ClockPunchOutView, self).form_valid(form)
这是我的实际表格。我这样做是因为我只希望用户可以在顶部导航栏中按下按钮。我计划稍后让这个更ajaxy......
<form method='POST' action='{% url 'administration:clock_in' %}'>
{% csrf_token %}
<input type="submit" style="margin-right:6px;" type="button" class="btn btn-success" value="Clock-in"></button>
</form>
<form method='POST' action='{% url 'administration:clock_out' %}'>
{% csrf_token %}
<input type="submit" style="margin-right:6px;" type="button" class="btn btn-danger" value="Clock-out"></button>
</form>
签到工作正常,但我需要以某种方式获取最后一个签到的 ID,以便签出视图知道要更新哪一行。我将如何获得最后一个时钟输入的 pk,在时钟输出字段中具有空白或空值?谢谢!
更新:我将对此有所不同,因为我很难在不通过 url 传递 pk 的情况下更新最后一条记录。我每次都会创建一个新条目,并使用最后两个条目让用户找到时间增量。我正在尝试编写一种方法,仅在用户签入时才签出用户,但它不起作用。最后一个条目确实有一个 punched_in = True 但是它的行为好像它没有所以问题必须与我下面的 form_valid 方法有关
class ClockPunchOutView(LoginRequiredMixin, CreateView):
context_object_name = "clock_punch"
model = ClockPunch
fields = ['punch_out_time', 'punched_out',]
#form_class = PunchOutForm
template_name = 'pages/layout.html'
success_url = '/'
def form_valid(self, form):
object = form.save(commit=False)
last_entry = ClockPunch.objects.filter(employee=self.request.user).order_by("-punch_in_time").first()
if last_entry.punched_in:
object.employee = self.request.user
object.punch_out_time = timezone.now()
object.punched_out = True
object.save()
return super(ClockPunchOutView, self).form_valid(form)
else:
return redirect('/')
解决方案
您可以获取该ClockPunch
员工的最新条目punch_in_time
:
object = ClockPunch.objects.filter(employee=self.request.user).order_by("-punch_in_time").first()
object.punch_out_time = timezone.now()
object.save()
推荐阅读
- jcr - Jack Rabbit OAK:如何在应用程序启动时避免后台读取操作
- java - 如何确定在哪个服务器上运行 spring 作业 - 主机名
- java - 组合两个 DataProviders 以从 excelsheet 读取时出现 UnresolvedParameter 错误
- sql-server - 无法从 Visual Studio 2019 连接 LocalDB
- php - 如果数据库连接失败,如何阻止 PHP MySQLi 显示警告消息?
- python - eclipse中的Py.test抛出AttributeError:模块'pytest'没有属性'main'
- angular - 关于 controlArray.push(new FormGroup) 无法启用() 之前的表单组控件
- android - 在 android R 中替换 BUILD_BROKEN_PHONY 和 phony-rebuild
- c++ - C++:实现公共接口函数,作为私有
- java - 如何根据用户输入管理加减值?