Правильный способ получения данных о пользователе из django User
Я создаю проект для практики и у меня есть продукт, и я хочу показать всем имена пользователей, которые продают этот продукт. Я установил поле user как ForeignKey User в модели, но я получаю в объекте ответа только id пользователя без чего-либо еще. Каков правильный способ доступа к имени пользователя?
Модель продавцов товара:
class ProductSeller(models.Model):
product_id=models.ForeignKey(Product,on_delete=models.CASCADE,default = None)
user=models.ForeignKey(User,on_delete=models.CASCADE)
condition = models.CharField(max_length=100, choices=condition_choices)
asked_price=models.IntegerField()
image=models.ImageField(null=True,blank=True)
Вид:
@api_view(['GET'])
def getSellersById(request,pk):
sellers=ProductSeller.objects.filter(product_id=pk)
seralizer=SellersSerializer(sellers,many=True)
return Response(seralizer.data)
Объект ответа:
{
"id": 2,
"condition": "Almost new",
"asked_price": 50,
"image": "image.jpg",
"product_id": 8,
"user": 1
},
Вы можете добавить метод к Product
модели:
Product(...):
...
def get_all_users_selling(self):
return User.objects.filter(productseller_set__product_id=self)
После этого добавьте его в ответ сериализатора:
@api_view(['GET'])
def getSellersById(request,pk):
sellers=ProductSeller.objects.filter(product_id=pk)
seralizer=SellersSerializer(sellers,many=True)
for seller in seralizer.data:
seller["all_users"] = [user.username for user in Product.objects.get(seller.get("product_id")).get_all_users_selling()]
return Response(seralizer.data)
Также не используйте _id
в конце полевой переменной ForeignKey
, это сбивает с толку, потому что Django создает колонку с суффиксом _id
, поэтому она становится something_id_id
.
Я решил эту проблему, добавив в класс sellerSerializer метод, который дает мне имя продавца:
class SellersSerializer(serializers.ModelSerializer):
seller_name=serializers.SerializerMethodField(read_only=True)
class Meta:
model=ProductSeller
fields='__all__'
def get_seller_name(self,obj):
return str(obj)