Django поле is_active не изменяется
Я использую django 4.0
когда я изменяю is_active
на False
из django admin, это не вносит никаких изменений в объект, я переопределил метод сохранения в models
models.py
class Topic(CreatedModel, DatedModel):
name = models.CharField(
max_length=255,
unique=True,
null=False,
)
slug = models.SlugField(
max_length=255,
unique=True,
help_text="A unique field used for creating Topics in Kafka"
)
category = models.CharField(
max_length=255,
blank=True,
choices=CATEGORY,
help_text="Default for constant value updates"
)
selected_model = models.CharField(
max_length=255,
choices=ALERT_MODELS,
unique=True,
help_text="The Model for sending updates to Kafka"
)
is_active = models.BooleanField(
default=True
)
def save(self, *args, **kwargs):
if self.pk is None:
print("New object topic")
topic_name = self.slug
invoke_kafka_topic_create.delay(topic_name)
super().save(*args, **kwargs)
def __str__(self):
return self.slug
admin.py
class TopicManager(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if getattr(obj, 'created_by', None) is None:
obj.created_by = request.user
obj.save()
else:
obj.modified_by = request.user
obj.save()
Может ли кто-нибудь дать совет? Проблема началась, когда я добавил save()
в models.py
Метод .save()
должен всегда вызывать суперметод, независимо от того, является ли pk
методом None
или нет, поэтому:
class Topic(CreatedModel, DatedModel):
# …
def save(self, *args, **kwargs):
if self.pk is None:
print('New object topic')
invoke_kafka_topic_create.delay(self.slug)
return super().save(*args, **kwargs) # 🖘 outside if body
Как мы знаем, метод save
вызывается, когда мы создаем или обновляем любой объект Django.
Если вы добавите
if self.pk is None:
эта функция не будет вызываться при обновлении объекта.