【问题标题】:Correct way to get user details from django User从 django User 获取用户详细信息的正确方法
【发布时间】:2022-10-02 14:49:20
【问题描述】:

我正在为实践构建项目,并且我有一个产品,我想向所有人展示销售该产品的所有用户的姓名。 我在模型中将用户字段设置为用户的 ForeignKey,但我在响应对象中只获取用户的 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
},

想要的结果:

     {
    \"id\": 2,
    \"condition\": \"Almost new\",
    \"asked_price\": 50,
    \"image\": \"image.jpg\",
    \"product_id\": 8,
    \"user\": 1,
    \"seller_name\":\"John\"

},

    标签: python django django-models django-rest-framework


    【解决方案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)
    

    另外,不要在ForeignKey字段变量的末尾使用_id,这很混乱,因为Django创建的列带有_id后缀,所以它变成了something_id_id

    【讨论】:

    • 它将为我提供为每个卖家对象销售产品的所有用户。因此,在每个卖家对象中,我将获得所有销售产品的用户的财产。我想要的是每个产品只有销售它的用户的名称。感觉应该很容易,但我错过了一步
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2014-11-08
    • 2015-11-18
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多