Почему Django ORM не сохраняет мои объекты
Я создал простой блог с помощью DRF и vue. При попытке сохранить мои Category & Tag Models Django возвращает объекты с null id. Однако при попытке сохранить объекты моих постов все работает нормально.
Кто-нибудь знает, что я делаю неправильно?
class Category(models.Model):
name = models.CharField(max_length=100, unique=True)
slug = models.SlugField(max_length=100, unique=True, null=False)
posts = models.ManyToManyField(Post, related_name='categories', blank=True)
def __str__(self):
return self.name
def save(self, *args, **kwargs): # new
if not self.slug:
self.slug = slugify(self.name)
После создания модели я не ожидаю появления id, но после сохранения модели ID должен появиться. Вот оболочка manage.py

Я получаю то же самое, если пропустить его через следующий сериализатор.
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
fields = [
'id', 'name', 'slug'
]
Я получаю те же данные обратно, когда вызываю конечную точку viewset. Как мне заставить django генерировать идентификаторы и сохранять модели? Я пытался сделать это вручную (после воссоздания тестовой базы данных) и результаты были те же. Я также пробовал удалять и восстанавливать миграции с нуля.
Для справки вот модель поста
class Post(models.Model):
owner = models.ForeignKey(User, on_delete=models.PROTECT)
title = models.CharField(max_length=100, unique=True)
slug = models.SlugField(max_length=100, unique=True, null=False)
body = models.TextField()
published = models.BooleanField(default=False)
published_at = models.DateTimeField(blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['-created_at']
def __str__(self):
return self.title
def save(self, *args, **kwargs): # new
if not self.slug:
self.slug = slugify(self.title)
return super().save(*args, **kwargs)
Вы не сделали вызов super().save(), следовательно, сохранение не вызовет логику сохранения объекта Category в базе данных. Вы должны реализовать это с помощью:
class Category(models.Model):
# …
def save(self, *args, **kwargs): # new
if not self.slug:
self.slug = slugify(self.name)
super().save(*args, **kwargs) # 🖘 save in the database
функция сохранения в вашей модели должна super().save()
