python - DjangoRestFramework 序列化程序的条件字段要求

标签 python django serialization django-rest-framework

我在 Django Rest Framework 2 中有这些嵌套的序列化程序:

class BookingSerializer(Serializer):
    reservation_history_id = serializers.IntegerField()
    credit_card = 'api.v1.serializer.AddCreditCardSerializer()'
    save_credit_card = serializers.BooleanField()
    promo_code = serializers.BooleanField(required=False)

    # validation stuff here ...

class AddCreditCardSerializer(ModelSerializer):
    """ Credit card model serializer """
    expiration_date = serializers.CharField()
    card_number = serializers.CharField()
    security_code = serializers.IntegerField()

    # validation stuff here ...

在我的 ApiView BookingApiView 中,我正在调用 BookingSerializer。 根据返回 True 或 False 的后端方法,我想强制要求或不要求信用卡字段。 我怎样才能做到这一点?谢谢。

最佳答案

您可以修改 BookingSerializer__init__ 方法中的字段。 初始化后,可以在 self.fields

中访问这些字段
class BookingSerializer(Serializer):
    reservation_history_id = serializers.IntegerField()
    credit_card = 'api.v1.serializer.AddCreditCardSerializer()'
    save_credit_card = serializers.BooleanField()
    promo_code = serializers.BooleanField(required=False)

    def __init__(self, *args, **kwargs):
        # initialize fields
        super(BookingSerializer, self).__init__(*args, **kwargs)
        # now modify the creditcard field
        self.fields['credit_card'].required = yourBackendMethod()

关于python - DjangoRestFramework 序列化程序的条件字段要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35721483/

相关文章:

python - 在 Pycharm 中使用 virtualenv 作为 Django IDE

python - Cassandra ResultSet 遍历一次后就变空了

javascript - JSON.NET 属性作为 Javascript 函数

Python - Tkinter Canvas 中的文本输入

python - Pandas concat ignore_index 不起作用

python - 哪种 dtype 是正确的,可以防止 numpy.arange() 获得错误的长度?

python - 如何使用Python 3.4通过代理访问HTTPS网页

django - 在Django Haystack中的MultiValueField中过滤多个值

python - 如何使用 Django + Nose 正确测试覆盖率

java - 有没有像 Schematics (Python) for Java 这样的工具?