Django save() отказывается обновлять существующую запись
У меня есть приведенная ниже модель и функция, которую я вызываю из view.py для обновления поля в этой модели под названием unread_count. Однако она продолжает пытаться создать запись вместо того, чтобы обновить существующую, и я получаю ошибку, показанную ниже. Я включил 2 оператора печати, чтобы показать, что записи существуют. Я пробовал разные вещи, чтобы заставить его работать, но у меня нет никакого прогресса (кроме того, что я рву на себе волосы). Любая помощь будет принята с благодарностью.
class RoomOccupier(TimeStampedModel):
room = models.ForeignKey(Room, on_delete=models.CASCADE, db_index=True)
occupier = models.ForeignKey(UserAccount, on_delete=models.CASCADE, related_name="+", db_index=True)
unread_count = models.PositiveSmallIntegerField(default=0, blank=False)
def __int__(self): # __unicode__ for Python 2
return self
@database_sync_to_async
def increment_unread(room_id):
roomOccupiers = RoomOccupier.objects.filter(room_id=room_id)
print(roomOccupiers)
for roomOccupier in roomOccupiers:
print(roomOccupier)
roomOccupier.unread_count += 1
roomOccupier.save()
return true
<QuerySet [<RoomOccupier: RoomOccupier object (1)>, <RoomOccupier: RoomOccupier object (2)>]>
RoomOccupier object (1)
Exception inside application: NOT NULL constraint failed: chat_roomoccupier.created
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/django/db/backends/sqlite3/base.py", line 413, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: NOT NULL constraint failed: chat_roomoccupier.created
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/channels/staticfiles.py", line 44, in __call__
return await self.application...etc...
Я бы посоветовал обновить кверсет в bulk, с .update(…)
[Django-doc]:
from django.db.models import F
@database_sync_to_async
def increment_unread(room_id):
RoomOccupier.objects.filter(room_id=room_id).update(
unread_count=F('unread_count')+1
)
return True