【发布时间】: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