Не удается отправить объект через axios в django - возможно, из-за объекта AnonymousUser?
Я пытаюсь добавить кнопку в React, которая постит объект в django через axios, когда пользователь нажимает на нее. Однако, кажется, что что-то не так в бэкенде.
Вот кнопка:
<button
id="add-rat"
type="button"
className="btn homeButton"
onClick={
(e) => submit(e)
}
>
Add rat
</button>
А вот аксиос, на той же странице:
const submit = (e) => {
const name = "namee";
const eyeColour = "Red";
const bodyColour = "White";
const bio = "hfff";
const image = "lineart.PNG";
const data = {
name: name,
eye_colour: eyeColour,
body_colour: bodyColour,
bio: bio,
image: image,
};
e.preventDefault();
console.log(data);
const token = localStorage.getItem("token");
axios
.post("http://127.0.0.1:8000/api/addObject", data, {
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
})
.then((res) => {
console.log(res.data);
})
.catch((err) => console.log(err));
};
Вот вывод моей консоли:
{name: 'namee',
eye_colour: 'Red', body_colour: 'White', bio: 'hfff', image: 'lineart.PNG'}
myRats.js:86 {res: 'Error Accured'}
(myRats.js:86 btw, is console.log(res.data); )
Вот мой view
для объекта:
class AddRat(APIView):
def post(self,request):
data = request.data
user = request.user
print(data)
try:
user = rat( name = data['name'] , body_colour = data['bodyColour'] , eye_colour = data['eyeColour'],user= user, bio = data['bio'] , image = data['image'])
user.save()
return Response({'res':"Rat Saved Successfully"})
except:
return Response({'res':"Error Accured"})
def get(self,request):
user = request.user
data = rat.objects.filter(user = user)
data = RatSerializer(data, many = True)
return Response({'data':data.data})
Когда я перехожу по url, на который он публикует, я получаю эту ошибку:
TypeError at /api/addObject
Field 'id' expected a number but got <django.contrib.auth.models.AnonymousUser object at 0x0000014641FD85B0>.
Может ли это быть связано с этим? Что может быть не так?
Проблема анонимного пользователя была решена путем изменения user = request.user
на user = request.user.id
Вторая проблема, "'Image' object is not callable", была вызвана тем, что я поместил (required=False) в другой набор скобок, как если бы я вызывал Image как функцию. Поэтому я изменил
image = Image(name=data["image"]["name"])(required=False)
инто
image = Image(name=data["image"]["name"], required=False)