我使用的是django 4.0
,当我将is_active
从django管理更改为False
时,它不会对对象进行任何更改,而是覆盖模型中的False
方法。
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
时,问题就开始了。
发布于 2022-06-17 05:46:05
.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
发布于 2022-06-17 05:57:42
如我们所知,当我们创建或更新Django的任何对象时,都会调用save
方法。如果添加if self.pk is None:
,则不会在对象更新时调用该函数。
https://stackoverflow.com/questions/72654768
复制相似问题