Я разрабатываю систему бронирования REST api в Django с относительно простой моделью, которая будет определять, есть ли у пользователя действительное членство, чтобы он мог зарезервировать определенный элемент. При создании резервирования у меня есть простой валидатор, написанный следующим образом:
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
функции проверки, в то время как API REST передает весь объект. Есть ли обходной путь для этого, или я должен ожидать вообще не использовать консоль администратора из-за этого ограничения?