python - 使用 django-rest-framework 的自动 'created by user' 字段?

标签 python django django-models django-rest-framework

模型.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 应该:

  1. Nuggetcreate 上设置
  2. 默认为创建 Nugget用户,无法覆盖此默认值
  3. 在检索到 Nugget 时包含并显示
  4. 不会在可浏览的 API 中显示为 create/POST 的选项
  5. 创建后不可编辑

最佳答案

更改 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/

相关文章:

xml - 多个对象创建 Tastypie POST XML

python - 如何在 django ModelForm 外键中设置默认选定值

python - auth.Users 代理模型的管理器

django-django-taggit表单

python - 对于 df 中的每个唯一时间戳,制作数据框中所有行的向量(Python)

python - 神经网络 MNIST

python - 为什么 PyCharm 错误地猜测 dict_items 列表的类型?

python - 如何使用 python 运行多个可执行文件?

python - django CMS博客应用TypeError : __init__() missing 1 required positional argument: 'on_delete'

python - 在 Django 中,如何查看用户的所有属性?