Django从视图中擦除日期字段值

时间:2013-04-02 02:39:55

标签: django datefield

一个随机的问题,但是我会尽力描述我想要做的事情。我正在构建一个应用程序来管理一组可以借出的实物资产。

要返回资产,用户访问/ return / 1 /清除用户名,借用日期,返回日期等

view.py

 def returnlaptop(request, laptop_pk):
        Laptops.objects.filter(pk=laptop_pk).update(laptop_status='In')
        Laptops.objects.filter(pk=laptop_pk).update(user='')
        Laptops.objects.filter(pk=laptop_pk).update(borrowed_date='')
        Laptops.objects.filter(pk=laptop_pk).update(return_date='')
        return HttpResponseRedirect('/')

除了我尝试更新models.datefield

中的值时,这很有效

[u“''值的日期格式无效。必须采用YYYY-MM-DD格式。”]

这周围有吗?或者我是以完全错误的方式解决这个问题?

干杯 XCOM

1 个答案:

答案 0 :(得分:0)

我不是100%肯定,但我认为这次数据库击中了4次......

第一个问题是update适用于查询集。您正在过滤主键,因此您只能获得1个对象。这意味着你应该使用get来代替这个

laptop = Laptops.objects.get(pk=laptop_pk)

现在您可以使用它来从数据库中正确地获取对象,修改它,并像这样保存它

laptop = Laptops.objects.get(pk=laptop_pk)
laptop.laptop_status = 'In'
laptop.user = ''
...
laptop.save()

只会打1次数据库。

最后一个问题是您正在尝试将日期设置为空字符串。这是行不通的,因为它期待一个日期对象。您可以做的一件事是修改模型,以便日期可以为空,以便数据库接受空值。

class Laptops(models.Model):
    ...
    borrowed_date = models.DateField(null=True, blank=True)
    return_date = models.DateField(null=True, blank=True)

您可以做的另一件事是使用timezone.datetime.min

访问最短日期
相关问题