I’m using django 4.0
when i change the is_active
to False
from django admin, it doesn’t make any changes to the object, I have override the save method in models.
models.py
JavaScript
x
37
37
1
class Topic(CreatedModel, DatedModel):
2
name = models.CharField(
3
max_length=255,
4
unique=True,
5
null=False,
6
)
7
slug = models.SlugField(
8
max_length=255,
9
unique=True,
10
help_text="A unique field used for creating Topics in Kafka"
11
)
12
category = models.CharField(
13
max_length=255,
14
blank=True,
15
choices=CATEGORY,
16
help_text="Default for constant value updates"
17
)
18
selected_model = models.CharField(
19
max_length=255,
20
choices=ALERT_MODELS,
21
unique=True,
22
help_text="The Model for sending updates to Kafka"
23
)
24
is_active = models.BooleanField(
25
default=True
26
)
27
28
def save(self, *args, **kwargs):
29
if self.pk is None:
30
print("New object topic")
31
topic_name = self.slug
32
invoke_kafka_topic_create.delay(topic_name)
33
super().save(*args, **kwargs)
34
35
def __str__(self):
36
return self.slug
37
admin.py
JavaScript
1
10
10
1
class TopicManager(admin.ModelAdmin):
2
3
def save_model(self, request, obj, form, change):
4
if getattr(obj, 'created_by', None) is None:
5
obj.created_by = request.user
6
obj.save()
7
else:
8
obj.modified_by = request.user
9
obj.save()
10
Can anyone advise ? The problem started when i added the save()
in models.py
Advertisement
Answer
The .save()
method should always call the super method, regardless whether pk
is None
or not, so:
JavaScript
1
8
1
class Topic(CreatedModel, DatedModel):
2
# …
3
4
def save(self, *args, **kwargs):
5
if self.pk is None:
6
print('New object topic')
7
invoke_kafka_topic_create.delay(self.slug)
8
return super().save(*args, **kwargs) # 🖘 outside if body