【问题标题】:Auto created_by field in DjangoDjango中的自动created_by字段
【发布时间】:2020-12-18 19:00:15
【问题描述】:

在我的一个模型中,我有一个 created_by 字段。我希望将其自动设置为创建实例的用户。我看到了这个:Auto-populating created_by field with Django admin site

但是,这仅适用于管理站点,不适用于 django rest 框架。关于我能做什么的任何想法?谢谢

【问题讨论】:

标签: django django-models django-rest-framework


【解决方案1】:

您有多种方法可以做到这一点。

最简单的方法是文档建议的方法 (https://www.django-rest-framework.org/api-guide/serializers/#passing-additional-attributes-to-save):

将附加属性传递给 .save()

有时您会希望您的视图代码能够注入额外的 保存实例时的数据。这些额外的数据可能 包括当前用户、当前时间或 不属于请求数据的任何其他内容。

您可以通过在调用时包含额​​外的关键字参数来做到这一点 。节省()。例如:

serializer.save(owner=request.user)

或者您可以覆盖序列化程序的.create() 方法,并使用self.context

class FooSerializer(serializers.Serializer):
    bar = serializers.CharField()
    created_by = serializers.IntegerField(read_only=True)  # FK

    def create(self, validated_data):
        created_by = get_object_or_404(User, user=self.context["request"].user)
        foo = Foo()
        foo.bar = validated_data["bar"]
        foo.created_by = created_by
        foo.save()
        return foo

【讨论】:

    猜你喜欢
    • 2010-10-25
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多