2013-04-02 2 views
0

Немного случайного вопроса, но я стараюсь изо всех сил описать, что я пытаюсь сделать. Я создаю приложение для управления набором физических активов, которые можно получить взаймы.Django wipe datefield value from view

Для возврата актива пользователь посещает/вернуться/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

[и "» 'значение имеет недопустимый формат даты. Он должен быть в формате YYYY-MM-DD. "]

есть в любом случае ар Ound это? или я иду об этом совершенно неправильно?

Приветствия Xcom

ответ

0

Я не 100% уверен, но я думаю, что попадает к базе данных в 4 раза ...

Первый вопрос заключается в том, что update предназначен для использования на QuerySet. Вы фильтруете первичный ключ, чтобы вернуть только один объект. Это означает, что вы должны использовать 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

+0

Спасибо Ngenator, я сделал следующие изменения без толку :( [и "„“значение имеет неверный формат даты. Он должен быть в формате YYYY-MM-DD. "] – xc0m

+0

@ xc0m Вы не можете установить его в пустую строку, попробуйте' None' или 'timezone.datetime.min' – Ngenator