Объекты Django в массиве отображаются как их идентификаторы
У меня есть UserProfile, в котором есть OneToOneField User.
В UserProfile у меня есть ManyToManyField Orders.
Когда я получаю заказы из user.profile, он возвращает массив его ID, а не целые объекты.
UserProfile:
class UserProfile(models.Model):
user = models.OneToOneField(User, related_name='userprofile', on_delete=models.CASCADE, unique=False)
orders = models.ManyToManyField(Order, blank=True)
def __str__(self):
return self.user.username
Порядок:
class Order(models.Model):
car_brand = models.CharField(max_length=30)
car_model = models.CharField(max_length=30)
repair_type = models.CharField(max_length=30)
user = models.ForeignKey(User, on_delete=models.CASCADE)
Сериализаторы:
class OrderSerializer(serializers.ModelSerializer):
class Meta:
model = Order
fields = ['car_brand', 'car_model', 'repair_type', 'user']
class UserProfileSerializer(WritableNestedModelSerializer, serializers.ModelSerializer):
orders = OrderSerializer(many=True)
class Meta:
model = UserProfile
fields = ['user', 'orders']
class UserSerializer(RegisterSerializer):
def save(self, request):
user = super().save(request)
user.username = self.data.get('username')
user.email = self.data.get('email')
user.password = self.data.get('password')
orders = []
profile = UserProfile(user, orders)
profile.user_id = user.id
profile.id = user.id
profile.save()
return user
И, самое главное, если я делаю GET запрос с помощью Postman, я получаю следующее:
{
"user": 5,
"orders": [
{
"car_brand": "Ford",
"car_model": "Galaxy",
"repair_type": "Gearbox",
"user": 5
}
]
}
И да, это именно то, что я хочу. Но React GET возвращает другое:
11 в данном случае это идентификатор порядка, который описан выше.
Итак, главный вопрос: Как сохранить этот заказ не как ID, или прочитать его не как ID.
UPD
Мой React GET запрос:
fetch('http://localhost:8000/api/v1/users/dj-rest-auth/user/', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: `Token ${localStorage.getItem('token')}`
}
})
.then(res => res.json())
.then(data => {
console.log(data)
setUser(data)
setId(data.pk)
});
Мой запрос React PUT:
let tmp = {
"user": id,
"orders": user.profile.orders
}
console.log(JSON.stringify(tmp))
fetch(`http://localhost:8000/profiles/${id}/`, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
Authorization: `Token ${localStorage.getItem('token')}`
},
body: JSON.stringify(tmp)
})
.then(res => res.json())
.then(data => {
console.log(data)
setTimeout(() => {
window.location.replace('http://localhost:3000/profile');
}, 60000);
});
