Правильный способ получения данных о пользователе из 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)
Вернуться на верх