#python #django #django-rest-framework
#python #django #django-rest-framework
Вопрос:
Я все еще новичок в Django и DRF. У меня есть 2 модели (Policy и Rescue), и Rescue связан с политикой с помощью внешнего ключа policy_id. У меня нет проблем с отправкой сообщения JSON и заполнением политики данными запроса с помощью CreateView. Однако 2-я модель Rescue должна быть заполнена на основе некоторых вычислений из данных JSON, размещенных в Политике. Спасение не может быть опубликовано заранее. Я очень старался, но понятия не имел, как это сделать.
Это как-то связано с вложенным сериализатором или чем-то еще?
Я пытался
Могу ли я попробовать этот способ: внутри класса CreateView:
class CreateView(generics.CreateAPIView):
def create(self, request, *args, **kwargs):
my_serializer = self.get_serializer(data=request.data)
...
# get a policy object based on 'policy_id' against serializer
my_policy = Policy.objects.get(policy_id=my_serializer.data['policy_id'])
...
... # some calculations to work out a rescue id, and will be returned and saved.
Rescue.objects.create(rescue_id='QD1234', policy=my_policy)
Ответ №1:
вы можете использовать общий CreateAPIView
и переопределить метод perform_create .
def perform_create(self, serializer):
my_policy = serializer.save()
# you custom calculation for rescue_id
rescue_obj = Rescue.objects.create(rescue_id='QD1234', policy=my_policy)
метод выполнения create описан здесь: https://www.django-rest-framework.org/api-guide/generic-views/#methods
Комментарии:
1. Спасибо, но как я мог бы выполнить некоторую проверку данных для восстановления? Нам все еще нужен экземпляр для его сериализатора? Я пытался выполнить rescue_obj.is_valid(), но, по-видимому, у этого объекта нет этого метода.
2. @Kai это совершенно другой вопрос. Вы должны задать другой вопрос или изменить этот, чтобы включить то, что вы хотите. Вы должны немного узнать, как работает stackoverflow. Комментарии не являются хорошим способом предоставления контекста для ответа. Вопрос должен быть ясен.
3. Спасибо. Я думаю, что заполнение данных должно включать проверку. Это не изолированная проблема.
4. @Kai добро пожаловать. Явное лучше, чем неявное