Как обновить время события в модели Django?

У меня есть следующий код. Ожидаемый результат будет следующим:

  1. Если событие не существует, то в форме администратора отображается только время created_at, поле updated_at пусто.
  2. Если событие существует: a. если нет updated_at, то поле будет заполнено временем сейчас. b. если updated_at существует, поле time должно быть обновлено.

Мой код не работает, как мне его изменить? Спасибо.

from django.db import models
from django.utils.timezone import now
import uuid


class Venue (models.Model):




class Types(models.TextChoices):
    LPN='LPN',
    RN ='RN'

type = models.CharField(
    max_length=3,
    choices=Types.choices,
    default=Types.RN
)
venue_id= models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
created_at = models.DateTimeField(default=now, editable=True,null=True, blank=True) 


if venue_id is True:

    updated_at = models.DateTimeField(default=now, editable=True,null=True,   blank=True)
    updated_at.update()

else:
    
    updated_at = models.DateTimeField(default=None, editable=True,null=True, blank=True)

place_text=models.CharField(max_length=200)


date = models.DateField ('Date')
start_time = models.DateTimeField ('start time')
finish_time= models.DateTimeField ('finish time')
details= models.CharField (max_length=500)

def _str_(self):
    return self.venue_text

обратитесь к прилагаемому снимку экрана.

enter image description here

Подобная логика должна выполняться через сигнал.

https://docs.djangoproject.com/en/4.0/ref/signals/#post-save

Если задать логику на модели таким образом, она не регистрирует изменения.

Переопределите ваши модели со всеми полями, которые вы хотите, чтобы они имели, если вы хотите
поле update_at должно быть нулевым при создании, пока оно не будет действительно
обновлено, используйте default=None, в противном случае вы можете использовать auto_now.

Если вы хотите, чтобы после редактирования какого-либо поля происходило определенное действие,
используйте сигналы.

from django.db import models
from django.utils import timezone
from django.utils.timezone import now
from django.dispatch import receiver  

from django.db.models.signals import (

    pre_save,
    post_save

    )
 # Create your models here.

class Venue (models.Model):

    class Types(models.TextChoices):
        LPN='LPN',
        RN ='RN'

type = models.CharField(
    max_length=3,
    choices=Types.choices,
    default=Types.RN
)

created = models.DateTimeField(default=now, editable=True,null=True, blank=True) 
updated = models.DateTimeField(default=None, editable=True,null=True, blank=True)

date = models.DateField ('Date')
start_time = models.DateTimeField ('start time')
finish_time= models.DateTimeField ('finish time')
details= models.CharField (max_length=500)
place_text=models.CharField(max_length=200)

def __str__(self):
    return self.place_text


@receiver(pre_save, sender=Venue)
def venue_pre_save(sender, instance, *args, **kwargs):

    #instance.updated =None
    instance.updated=timezone.now()

@receiver(post_save, sender=Venue)
def venue_post_save(sender, instance,created, *args, **kwargs):

    if created:

        instance.updated=timezone.now()
        instance.save()
Вернуться на верх