相关疑难解决方法(0)

使用@property与getter和setter

这是一个纯Python特定的设计问题:

class MyClass(object):
    ...
    def get_my_attr(self):
        ...

    def set_my_attr(self, value):
        ...
Run Code Online (Sandbox Code Playgroud)

class MyClass(object):
    ...        
    @property
    def my_attr(self):
        ...

    @my_attr.setter
    def my_attr(self, value):
        ...
Run Code Online (Sandbox Code Playgroud)

Python让我们可以这样做.如果你要设计一个Python程序,你会使用哪种方法?为什么?

python properties getter-setter

711
推荐指数
13
解决办法
41万
查看次数

Django Rest Framework - 如何在ModelSerializer中添加自定义字段

我创建了一个ModelSerializer并且想要添加一个不属于我的模型的自定义字段.

我在这里找到了添加额外字段的说明,并尝试了以下内容:

customField = CharField(source='my_field')
Run Code Online (Sandbox Code Playgroud)

当我添加此字段并调用我的validate()函数时,此字段不是attrdict的一部分.attr包含除额外字段外指定的所有模型字段.所以我在覆盖验证中无法访问此字段,是吗?

当我将此字段添加到字段列表时,如下所示:

class Meta:
    model = Account
    fields = ('myfield1', 'myfield2', 'customField')
Run Code Online (Sandbox Code Playgroud)

然后我得到一个错误,因为customField它不是我的模型的一部分 - 什么是正确的,因为我想只为这个序列化器添加它.

有没有办法添加自定义字段?

python django django-rest-framework

79
推荐指数
8
解决办法
6万
查看次数

在DRF 3中的ModelSerializer上添加非模型字段

如何在DRF 3中的ModelSerializer上添加非模型字段?即添加我的实际模型中不存在的字段?

class TestSerializer(serializers.ModelSerializer):
    url = serializers.HyperlinkedIdentityField(view_name='vote_detail')
    non_field = serializers.CharField()  # no corresponding model property.


    class Meta:
        model = vote_model
        fields = ("url", "non_field")

    def create(self, validated_data):
      print(direction=validated_data['non_field'])
Run Code Online (Sandbox Code Playgroud)

但是DRF 3给了我错误:

Got AttributeError when attempting to get a value for field `non_field` on serializer `TestSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Test` instance.
Original exception text was: 'Test' object has no attribute 'non_field'.
Run Code Online (Sandbox Code Playgroud)

我已经使用非模型write_only字段搜索了堆栈DRF - ModelSerializer,并找到了一些解决方案,但这些解决方案是指我正在使用DRF 3的DRF …

python django django-rest-framework

28
推荐指数
2
解决办法
2万
查看次数

Django REST Serializer方法可写字段

我正在阅读Django REST Framework,我有一个使用SerializerMethodField()与getter序列化的模型.

但是,当我POST到此端点时,我希望能够设置此字段,但这不起作用,因为正如上面的文档所示,您无法写入SerializerMethodField.Django REST中是否有任何方法可以为您定义自定义getter方法的序列化器字段,以及自定义setter方法?

编辑:这是我正在尝试做的事情的来源.客户与用户具有一对一的关系.

class ClientSerializer(serializers.ModelSerializer):
    email = serializers.SerializerMethodField()

    def create(self, validated_data):
        email = validated_data.get("email", None) # This doesn't work because email isn't passed into validated_data because it's a readonly field
        # create the client and associated user here


    def get_email(self, obj):
        return obj.user.email

    class Meta:
        model = Client
        fields = (
            "id",
            "email",
        )
Run Code Online (Sandbox Code Playgroud)

django rest serializer django-rest-framework

12
推荐指数
3
解决办法
5541
查看次数

在JSON输出中包含get_absolute_url值

刚进入Django Rest Framework.

我有一个简单的示例运行,其中通过REST API呈现模型.模型中没有相关字段,只是一堆字符串.

get_absolute_url()将该模型的值呈现给JSON输出的最简单方法是什么?

我正在serializers.HyperlinkedModelSerializer准备进入具有相关领域的更复杂的模型.

django django-rest-framework

6
推荐指数
1
解决办法
1284
查看次数