0
考虑以下模型:Django的REST框架:填充领域的最佳方式手动
class Request(models.Model):
user = models.ForeignKey('User', related_name='requests')
并与创建/更新一个视图集:
class RequestViewSet(mixins.CreateModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
我想设置用户只上创建,而不是更新
解决方案一:
class RequestViewSet(mixins.CreateModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):
def pre_save(self, obj):
create = False
try:
if not obj.user:
create = True
except ObjectDoesNotExist:
create = True
if create:
obj.user = self.request.user
解决方案二使用restore_object:
class RequestSerializer(serializers.ModelSerializer):
def restore_object(self, attrs, instance=None):
create = not instance
instance = super(RequestSerializer, self).restore_object(attrs, instance)
if create:
request = self.context['request']
instance.user = request.user
return instance
更重要的是合理的? 我倾向于更喜欢第一个(除了尝试/除了我找不到替代它)