Проблема с формой React и передачей информации на бэкэнд в DjangoPython

Программы на Python
Ответить
Anonymous
 Проблема с формой React и передачей информации на бэкэнд в Django

Сообщение Anonymous »

У меня есть представление в Django, которое отвечает за запись пользователя на тренировку с личным тренером. Этому представлению нужен полный объект Trainer, но форма реагирования передает Django только идентификатор тренера, несмотря на то, что атрибут PrimaryKeyRelatedField установлен в сериализаторе.
Это ошибка, которую я получил:
Это ошибка:
Это ошибка:
р>
Error: Cannot assign "'2'": "TrainingSession.trainer" must be a "Trainer" instance.

@api_view(["POST"])
@permission_classes([IsAuthenticated])
def create_training_session(request):
data = request.data

# Check require information
if "trainer" not in data or "date" not in data or "duration" not in data:
return Response(
{"detail": "Brak wymaganych pól."}, status=status.HTTP_400_BAD_REQUEST
)

try:
session = TrainingSession.objects.create(
trainer=data["trainer"],
client=request.user,
date=data["date"],
duration=data["duration"],
)
serializer = TrainingSessionSerializer(session, many=False)
return Response(serializer.data, status=status.HTTP_201_CREATED)
except Exception as e:
return Response({"detail": str(e)}, status=status.HTTP_400_BAD_REQUEST)

class TrainingSessionSerializer(serializers.ModelSerializer):
trainer = serializers.PrimaryKeyRelatedField(queryset=Trainer.objects.all())
client = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())

class Meta:
model = TrainingSession
fields = ["id", "trainer", "client", "date", "duration", "status"]

import React, { useState, useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import {Button, Form, FloatingLabel} from "react-bootstrap";
import { bookTrainingSession, listTrainers } from '../actions/serviceActions';

const BookTrainingSessionForm = () => {
const [trainer, setTrainer] = useState('');
const [date, setDate] = useState('');
const [duration] = useState(60);

const dispatch = useDispatch();

const trainerList = useSelector((state) => state.trainerList);
const { loading: loadingTrainers, error: errorTrainers, trainers } = trainerList;

const sessionTrainingBook = useSelector((state) => state.sessionTrainingBook);
const { loading, error, success } = sessionTrainingBook;

useEffect(() => {
dispatch(listTrainers());
}, [dispatch]);

const submitHandler = (e) => {
e.preventDefault();
dispatch(bookTrainingSession({ trainer, date, duration }));
};

return (


Trener
{loadingTrainers ? (
Loading trainers...
) : errorTrainers ? (
Error: {errorTrainers}
) : (
setTrainer(e.target.value)} required>
Wybierz trenera
{trainers.map((trainer) => (

{trainer.name}

))}

)}


Data
setDate(e.target.value)} required />


{loading ? 'Booking...' : 'Book Session'}

{error && Error: {error}}
{success && Session booked successfully!}

);
};

export default BookTrainingSessionForm;



Подробнее здесь: https://stackoverflow.com/questions/789 ... -in-django
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»