相关疑难解决方法(0)

Django REST Framework:向ModelSerializer添加其他字段

我想序列化一个模型,但是想要包含一个额外的字段,该字段需要对要序列化的模型实例进行一些数据库查找:

class FooSerializer(serializers.ModelSerializer):
  my_field = ... # result of some database queries on the input Foo object
  class Meta:
        model = Foo
        fields = ('id', 'name', 'myfield')
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?我看到你可以将额外的"上下文"传递给序列化器,是在上下文字典中传入附加字段的正确答案吗?使用这种方法,获得我需要的字段的逻辑不会与串行器定义一起自包含,这是理想的,因为每个序列化实例都需要my_field.在DRF序列化器文档的其他地方,它 "额外的字段可以对应于模型上的任何属性或可调用".我正在谈论的是额外的领域吗?我应该在Foo模型定义中定义一个返回my_field值的函数吗?在序列化器中我将my_field挂钩到那个可调用的函数?那是什么样的?

在此先感谢,如有必要,请尽快澄清问题.

django rest django-rest-framework

122
推荐指数
7
解决办法
8万
查看次数

DRF - 带有非模型 write_only 字段的 ModelSerializer

我有以下模型、序列化程序和视图。我的目标是传递一个自定义字符串,如

referrer = "pid=email&af_sub1=ui_1120&c=xyz"
Run Code Online (Sandbox Code Playgroud)

在POST方法中(下面RegisterViewSet)然后到viewset/serializer使用这个信息填写referral_campaign、referral_media和inviting_user

所以:1.referrer 是 write_only 字段 2.referrer 不是模型中的字段,但信息将用于填充模型中的字段

如何以 DRF 方式实现这一点?

模型

class User(AbstractUser):     
    first_name = models.CharField(max_length=100, null=True, blank=True)
    last_name = models.CharField(max_length=100, null=True, blank=True)

    # social/viral feature related fields
    referral_campaign = models.CharField(default="", max_length = 200, help_text="Campaign that led to the user signup")
    referral_media_source = models.CharField(default="", max_length = 200, help_text="Campaign that led to the user signup")
    inviting_user = models.ForeignKey('self', help_text="Inviting user", null=True, blank=True)
Run Code Online (Sandbox Code Playgroud)

序列化器

class UserSerializer(serializers.ModelSerializer):

class Meta:
    model = User
    fields = ('first_name', 'last_name',)
    write_only_fields = ('first_name', …
Run Code Online (Sandbox Code Playgroud)

python django django-serializer django-rest-framework

3
推荐指数
2
解决办法
5027
查看次数