AttributeError: объект 'NoneType' не имеет атрибута 'username' Django Rest Serializers POST запрос
Я делаю пост-запрос к бэкенду django из фронтенда react. Для этого я отправляю объект json, но бэкенд выдает ошибку. Я передал данные своему сериализатору в виде приведенных ниже json-объектов, удалив поля по умолчанию, такие как id, created и updated, и отправив оставшиеся поля. POST не является успешным и показывает ошибку, как указано ниже...
Internal Server Error: /create_message/
Traceback (most recent call last):
File "C:\Users\Ajay\Desktop\New folder\Mars\marsgc\main\serializers.py", line 31, in
get_messager
return obj.messager.username
AttributeError: 'NoneType' object has no attribute 'username'
Вызов функции на фронтенде следующий:
let add_message = async (message) => {
await fetch(`http://localhost:8000/create_message/`,{
method: 'POST',
headers:{
'Content-Type':'application/json'
},
body:JSON.stringify(message)
})
}
const new_message = async (e) => {
e.preventDefault()
const messager = user;
const body = message;
const room_in = room.id;
await add_message({body,messager,room_in})
}
Общим объектом сообщения django rest является
{
"id": 2,
"body": "Hi",
"created": "2022-02-20T17:41:47.796395Z",
"updated": "2022-03-13T17:20:26.949428Z",
"messager": "ajay",
"room_in": 17
},
Мои модели:
class Topic(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Room(models.Model):
host = models.ForeignKey(User,on_delete=models.CASCADE,null=True)
topic = models.ForeignKey(Topic,on_delete=models.CASCADE,null=True)
name = models.CharField(max_length=200)
description = models.TextField(blank=True,null=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['-updated', '-created']
def __str__(self):
return self.name
class Message(models.Model):
messager = models.ForeignKey(User,on_delete=models.CASCADE,null=True)
room_in = models.ForeignKey(Room,on_delete=models.CASCADE)
body = models.TextField(blank=False)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.body
Моими сериализаторами являются
class MessageSerializer(serializers.ModelSerializer):
messager = serializers.SerializerMethodField(source='get_messager')
class Meta:
model = Message
fields = ['id','body','created','updated','messager','room_in']
def get_messager(self, obj):
return obj.messager.username
Метод/представление, которое я вызываю:
@api_view(['POST'])
def create_message(request):
serializer = MessageSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)