[英]How to append value to the ArrayField in Django with PostgreSQL?
I have created a model with the ArrayField
in Django Model.我在 Django 模型中使用
ArrayField
创建了一个模型。 I am using PostgreSQL
for the database.我正在使用
PostgreSQL
作为数据库。 I want to create new rows in the database or update the existing rows.我想在数据库中创建新行或更新现有行。 But I can not insert or append data to the
ArrayField
.但我无法将数据插入或附加到
ArrayField
。
Model模型
class AttendanceModel(BaseModel):
"""
Model to store employee's attendance data.
"""
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='attendance_user')
date = models.DateField()
time = ArrayField(models.TimeField(), blank=True, null=True)
class Meta:
unique_together = [['user', 'date']]
def __str__(self):
return f'{self.user.username} - {self.date}'
View看法
attend, created = models.AttendanceModel.objects.get_or_create(user=fingerprint.user, date=attendance_date)
attend.time = attend.time.append(attendance.timestamp.time())
attend.save()
The time
field does not being created or updated with the new value.不会使用新值创建或更新
time
字段。
How can I do this?我怎样才能做到这一点?
attend.time = attend.time.append(attendance.timestamp.time())
Here the return value of list.append(...)
is being assigned to attend.time
, which is None
, thus the attend.time
is not getting updated.这里
attend.time
list.append(...)
的返回值被分配给了参加时间,即None
,因此参加attend.time
没有得到更新。
Try this instead,试试这个,
attend, created = models.AttendanceModel.objects.get_or_create(
user=fingerprint.user, date=attendance_date
)
attend.time.append(attendance.timestamp.time())
attend.save()
Following this Answer I did this.按照这个答案,我这样做了。
from django.db.models import Func, F, Value
.
.
.
attend, created = models.AttendanceModel.objects.get_or_create(user=fingerprint.user, date=attendance_date)
attend.time = Func(F('time'), Value(attendance.timestamp.time()), function='array_append')
attend.save()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.