Python Django Rest框架只读字段问题

Python Django Rest框架只读字段问题,python,django,rest,serialization,slug,Python,Django,Rest,Serialization,Slug,我正在学习DRF,我遇到了一个问题。我在模型中有slug字段,我想从标题中对其进行slug。问题是,无论我用什么方法,我都无法完成自动填充。我在模型中创建了如下自定义保存方法: class PostObjects(models.Manager): def get_queryset(self): return super().get_queryset().filter(status="published") class Post(models.Mod

我正在学习DRF,我遇到了一个问题。我在模型中有slug字段,我想从标题中对其进行slug。问题是,无论我用什么方法,我都无法完成自动填充。我在模型中创建了如下自定义保存方法:

class PostObjects(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(status="published")


class Post(models.Model):
    options = (("draft", "Draft"), ("published", "Published"))
    
    category = models.ForeignKey(Category, on_delete=models.PROTECT, default=1)
    title = models.CharField(max_length=250)
    excerpt = models.TextField(null=True)
    content = models.TextField()
    slug = models.SlugField(max_length=250, unique_for_date="published")
    published = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(
        get_user_model(), on_delete=models.CASCADE, related_name="blog_posts"
    )
    status = models.CharField(max_length=10, choices=options, default="published")
    objects = models.Manager()
    postobjects = PostObjects()
    
    class Meta:
        ordering = ("-published",)
    
    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super().save(*args, **kwargs)
    
    def __str__(self):
        return self.title
然后,我尝试在Serializer.py中使用几种方法使字段只读:

class PostSerializer(serializers.ModelSerializer):
    slug = serializers.ReadOnlyField()

    class Meta:
        model = Post
        fields = ("id", "title", "author", "excerpt", "content", "status", "slug")
        #read_only_fields = ["slug"]
        #extra_kwargs = {'slug': {'read_only': True}}
这三种方式(只读字段、只读字段、额外的KWARG)都给出了需要slug的错误信息。我还尝试在视图中创建自定义的“perform_create”,这样我就可以将此slagify提供给.save方法,但再次没有结果,原样.valid给出false

感谢您的帮助!
谢谢

我不知道你为什么会失败。 我试过这个简单的例子

#models.py
从django.db导入模型
从django.utils.text导入slugify
#在这里创建您的模型。
类MyModel(models.Model):
title=models.TextField()
slug=models.SlugField()
def保存(自身、*args、**kwargs):
self.slug=slagify(self.title)
super().save(*args,**kwargs)
#serializers.py
从rest_框架导入序列化程序
从。模型导入MyModel
类MyModelSerializer(serializers.ModelSerializer):
类元:
model=MyModel
只读字段=('slug',)
字段='\uuuu所有\uuuu'
#views.py
从rest_框架导入泛型
从。模型导入MyModel
从.serializer导入MyModelSerializer
#在这里创建您的视图。
类MyView(generics.CreateAPIView):
serializer\u class=MyModelSerializer
queryset=MyModel.objects.all()

而且对我有效

嗨,我只是想确定一下,你能把你得到的错误贴出来吗?你写UT是为了显示这个问题吗?@MassimoCosta你好,我添加了一个有错误的截图。很抱歉,我不明白你所说的UTUT(单元测试)是什么意思。很抱歉,我太短了:D不确定
ReadOnlyField()
,文档中说它是自动生成的。在注释代码中有一个类型。它应该是
只读字段
而不是
只读字段
它实际上是只读字段。这是我在评论时犯的错误。好吧,我想我明白了原因。SlugField中的“unique_for_date”属性正在创建问题。我把它取了下来,效果很好。非常感谢你的帮助。我知道DRF网站上提到了“一起独一无二”的限制,但没有提到“独一无二的约会”