Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-pre_保存信号中的get auto_now字段_Python_Django_Signals - Fatal编程技术网

Python Django-pre_保存信号中的get auto_now字段

Python Django-pre_保存信号中的get auto_now字段,python,django,signals,Python,Django,Signals,我正在使用Django 2.1.5 有一个模型具有“auto_now”字段: class BaseModel(models.Model): id = models.UUIDField(default=uuid.uuid4, editable=False, db_index=True, unique=True, primary_key=True) updated_at = models.DateTimeField(db_index=True, auto_now=True)

我正在使用Django 2.1.5

有一个模型具有“auto_now”字段:

class BaseModel(models.Model):
    id = models.UUIDField(default=uuid.uuid4, editable=False, db_index=True, unique=True, primary_key=True)
    updated_at = models.DateTimeField(db_index=True, auto_now=True)
    updated_by = models.CharField(max_length=200)
    responded_at = models.DateTimeField(db_index=True, null=True, blank=True)
    responded_by = models.CharField(max_length=200, null=True, blank=True)
现在,我有一个该型号的
pre_save
信号,我想在那里更新
responsed_at
responsed_by
字段,使其等于
updated_at
updated_by
。在该信号中,
updated\u by
值已经是新的值,应该在请求末尾,但是
处的
updated\u不是。它是旧(当前)值。
如果可能的话,我希望能够在保存后在
字段中获得
updated_中应该存在的值


我之所以使用
pre\u save
信号而不是
post\u save
,是因为我正在更新其中的实例

由于您现在在
字段中使用的是
auto\u
updated\u,因此它将继承
editable=False
blank=True

作为国家:

按照当前的实现,将auto_now或auto_now_add设置为True将导致字段设置为editable=False和blank=True

为了避免这种情况,可以编写如下自定义字段:

from django.utils import timezone


class AutoDateTimeField(models.DateTimeField):
    def pre_save(self, model_instance, add):
        return timezone.now()
class BaseModel(models.Model):
    updated_at = models.AutoDateTimeField(default=timezone.now)
    # ...
您可以在
BaseModel
中这样使用它:

from django.utils import timezone


class AutoDateTimeField(models.DateTimeField):
    def pre_save(self, model_instance, add):
        return timezone.now()
class BaseModel(models.Model):
    updated_at = models.AutoDateTimeField(default=timezone.now)
    # ...

这样,
updated\u at
字段应该是可编辑的,您的信号应该可以工作。

因为您现在正在使用
auto\u
updated\u at
字段,它将继承
editable=False
blank=True

作为国家:

按照当前的实现,将auto_now或auto_now_add设置为True将导致字段设置为editable=False和blank=True

为了避免这种情况,可以编写如下自定义字段:

from django.utils import timezone


class AutoDateTimeField(models.DateTimeField):
    def pre_save(self, model_instance, add):
        return timezone.now()
class BaseModel(models.Model):
    updated_at = models.AutoDateTimeField(default=timezone.now)
    # ...
您可以在
BaseModel
中这样使用它:

from django.utils import timezone


class AutoDateTimeField(models.DateTimeField):
    def pre_save(self, model_instance, add):
        return timezone.now()
class BaseModel(models.Model):
    updated_at = models.AutoDateTimeField(default=timezone.now)
    # ...

这样,
updated\u at
字段应该是可编辑的,您的信号应该可以工作。

谢谢,但这不是我想要的。我想在
处获取
updated\u的值,就好像我在post\u save中一样,并将其放在
处的
responsed\u中。我不想编辑
updated_at
如果您想在
BaseModel
对象更改时获取
updated_at
的值并将其保存在
responsed_at
字段中,我不明白为什么您不想创建一个从
DateTimeField
继承的自定义字段,以使您的信号工作?谢谢,但这不是我想要的。我想在
处获取
updated\u的值,就好像我在post\u save中一样,并将其放在
处的
responsed\u中。我不想编辑
updated_at
如果您想获取
updated_at
的值并将其保存在
responsed_at
字段中,每当
BaseModel
对象被更改时,我不明白为什么您不想创建一个从
DateTimeField
继承的自定义字段以使信号工作?