【问题标题】:Django REST Framework validation function has different signature than Django models?Django REST Framework 验证功能与 Django 模型具有不同的签名?
【发布时间】:2020-05-02 16:03:44
【问题描述】:

我正在用一个相对简单的模型在 Django 中开发一个预订系统 REST api,该模型将确定用户是否具有有效的会员资格,以便他们预订某个项目。创建预订时,我有一个简单的验证器,如下所示:

def validate_member(value):
    """
    Validator for a user in a reservation. Will throw a ValidationError if the user does not have an
    updated membership.
    """
    if not valid_membership(value):
        raise ValidationError("User does not have a valid membership!")

这个验证是在预订表中的外键字段上运行的,它是这样写的:

    # The gear item in the reservation
    gear_item = models.ForeignKey(Entry,
                                  on_delete=models.SET_NULL,
                                  null=True,
                                  help_text="The gear item being reserved.",
                                  validators=[validate_entry]
                                  )

这个模型的序列化器被写成一个ModelSerializer,像这样:

class ReservationSerializer(serializers.ModelSerializer):
    class Meta:
        model = Reservation
        fields = "__all__"

此设计适用于 REST API 中的查询,但无法在管理控制台中进行任何修改,并出现错误:'int' object has no attribute 'rentable'

似乎在管理控制台中验证外键会将主键整数传递到验证函数的value 参数中,而 REST API 传递的是整个对象。是否有解决方法,或者由于此限制,我应该完全不使用管理控制台?

【问题讨论】:

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


    【解决方案1】:

    解决此问题的最佳解决方案/解决方法是覆盖您的管理控制台的表单。 我认为this 代码 sn-p 足以让您处理您的特定字段并且它是验证。

    【讨论】:

      猜你喜欢
      • 2015-12-10
      • 2017-03-29
      • 1970-01-01
      • 2020-01-30
      • 2020-05-23
      • 2020-04-23
      • 2015-12-26
      • 2014-09-21
      • 2015-12-16
      相关资源
      最近更新 更多