模型.py
class Nugget(TimeStampedModel):
added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, related_name='added_by', blank=True, null=True)
序列化器.py
class NuggetSerializer(TaggitSerializer, serializers.ModelSerializer):
added_by = serializers.CreateOnlyDefault(default=serializers.CurrentUserDefault())
View .py
class NuggetList(generics.ListCreateAPIView):
queryset = Nugget.objects.all()
serializer_class = NuggetSerializer
def perform_create(self, serializer):
serializer.save(added_by=self.request.user)
我要实现的目标:
added_by
应该:
- 在
Nugget
的create
上设置 - 默认为创建
Nugget
的用户
,无法覆盖此默认值 - 在检索到
Nugget
时包含并显示 - 不会在可浏览的 API 中显示为
create/POST
的选项 创建
后不可编辑
最佳答案
更改 serializers.py
中的 added_by
(未使用字段,并设置为 read_only)和 .save()
views.py
停止覆盖默认值。
CurrentUserDefault()
需要 context
字典中的 request
。在这种情况下,generics.ListCreateAPIView
已经这样做了。
模型.py
class Nugget(TimeStampedModel):
added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, related_name='added_by', blank=True, null=True)
序列化器.py
class NuggetSerializer(TaggitSerializer, serializers.ModelSerializer):
added_by = serializers.StringRelatedField(default=serializers.CurrentUserDefault(), read_only=True)
View .py
class NuggetList(generics.ListCreateAPIView):
queryset = Nugget.objects.all()
serializer_class = NuggetSerializer
def perform_create(self, serializer):
serializer.save()
关于python - 使用 django-rest-framework 的自动 'created by user' 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38556217/