我正在尝试从自己的序列化器中获取实例
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'
答案 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()
获取帮助