【发布时间】:2014-10-17 03:00:03
【问题描述】:
考虑以下模型:
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
什么更符合逻辑? 我更喜欢第一个(除了 try/except 但我没有其他选择)
【问题讨论】:
标签: python django django-rest-framework