从djangoUser获取用户详细信息的正确方法



我正在为实践构建项目,我有一个产品,我想向每个人展示销售该产品的所有用户的姓名。在模型中,我已经将user字段设置为user的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"
},

您可以向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

我通过添加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)

相关内容

最新更新