如何从Django中的序列化器获取实例

时间:2018-09-15 20:29:11

标签: django django-rest-framework

我正在尝试从自己的序列化器中获取实例

def perform_create(self, serializer):

    serializer.save(slug=utils.unique_slug_generator(**serializer.validated_data),user_profile=self.request.user)

但是没有用,因为我在unique_slug_generator中尝试访问实例的标题

ModelClass = instance.__class__
qs_exists = ModelClass.objects.filter(slug=slug).exists()

错误:unique_slug_generator()得到了意外的关键字参数'title'

2 个答案:

答案 0 :(得分:2)

通常,您可以通过键入以下内容来创建实例:

serializer = Serializer(**validated_data)

然后使用serializer.is_valid()检查validated_data是否有效。

然后,使用serializer.save()保存模型。

要获取字典,请使用serializer.data

希望有帮助。

答案 1 :(得分:0)

您可以在执行创建之前添加事务。如果有任何无效的东西,请向回滚数据库提出异常。

from django.db import transaction
    def perform_create(self, serializer):
        with transaction.atomic():
            obj = serializer.save()
            # validate anything you want, if not valid, raise exception and transaction will back before serializer.save. So nothing happen
            if not utils.unique_slug_generator(**serializer.validated_data):
                raise exceptions.ValidationError('not valid')
            obj.slug=utils.unique_slug_generator(**serializer.validated_data)
            obj.user_profile = self.request.user
            obj.save()

获取帮助