【问题标题】:'QuerySet' object has no attribute 'date_start'. Django rest framework'QuerySet' 对象没有属性 'date_start'。 Django 休息框架
【发布时间】:2022-01-26 03:10:32
【问题描述】:

我是 Django 新手。在我的项目中,我想过滤所有可用状态的房间,然后我希望将 start_date 更新为当前日期时间。但我收到以下错误:

'QuerySet' object has no attribute 'start_date'

我在 models.py 中有以下类:

class RoomStatus(models.Model):

room = models.ForeignKey(Room, on_delete=models.DO_NOTHING)

  class RoomStatusChoices(models.IntegerChoices):

  AVAILABLE = 1
  UNAVAILABLE = 2

  room_status = 
  models.SmallIntegerField(choices=RoomStatusChoices.choices, 
  default=RoomStatusChoices.AVAILABLE)

  start_date = models.DateTimeField(auto_now=True)

在 serializers.py 我用这段代码写了一个更新

  available_rooms = RoomStatus.objects.filter(room=room, 
  room_status=RoomStatusChoices.AVAILABLE)
  print(available_rooms)  
  available_rooms.start_date = max(available_rooms.start_date, datetime.now())
 

print(available_rooms) 的结果是

有人可以帮助我吗?谢谢提前。

【问题讨论】:

  • available_rooms 是一个查询集,它是一个可迭代的房间对象(在您的情况下它是空的)。该列表没有 .start_date 属性,因为它不是房间对象。列表的每个元素都可能具有属性,但列表(或更准确地说 - 查询集)没有。
  • @NotSoShabby- 我应该将 strat_date 添加到 qureyset 吗?
  • 您必须从查询集的元素中获取 start_date,例如 available_rooms[0].start_date
  • @Luiz- 它不工作仍然得到同样的错误。

标签: python django django-models django-rest-framework django-views


【解决方案1】:
from django.db.models import Max
start_date_max = available_rooms.aggregate(Max('start_date'))

现在star_date_max 将成为类似{'start_date__max': date(.....)} 的说明;确认.. 打印出来看看。

现在设置查询集中的所有start_date 对象..

new_start_date = star_date_max["start_date__max"]
available_rooms.update(start_date=new_start_date)

应该做的工作。

【讨论】:

  • 感谢您的回答,但我可以解决使用 for 循环的问题:for available_room in available_rooms:
猜你喜欢
  • 2021-10-17
  • 2016-06-30
  • 2020-10-31
  • 2016-12-30
  • 1970-01-01
  • 2016-11-11
  • 2021-08-05
  • 2017-06-22
  • 2013-05-10
相关资源
最近更新 更多