【发布时间】:2022-01-28 05:44:11
【问题描述】:
我用 DRF 和 vue 创建了一个简单的博客。尝试保存我的类别和标签模型时,Django 返回具有空 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'
]
我也调用了我的视图集端点来获取相同的数据。如何让 django 生成 id 并保存模型?我也尝试过手动操作(在重新创建测试数据库之后),结果是一样的。我也尝试过从头开始删除和重建迁移。
这里是post模型供参考
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)
【问题讨论】:
标签: python django django-models django-rest-framework