我希望得到客户的全名,但最后我只得到了ID。
orders = Order.objects.filter(restaurant=request.user.restaurant).order_by('customer__id').values('customer__id', 'customer__address', 'customer__avatar', 'customer').annotate(total_order= Count('customer__id'))
in value('customer')我想得到客户的全名,但我只得到了id。
from django.contrib.auth.models import User
class Customer(models.Model):
user = models.OneToOneField(User, on_delete= models.CASCADE, related_name= 'customer')
avatar = models.CharField(max_length= 500)
phone = models.CharField(max_length= 500, blank= True)
address = models.CharField(max_length= 500, blank= True)
def __str__(self):
return self.user.get_full_name()
感谢。
答案 0 :(得分:1)
这就是values
和values_list
方法的工作原理。对于外键,它们将id(或任何唯一字段返回到外键点)。我担心您需要单独获取用户对象,或者不是.values
使用.select_related
(或.prefetch_related
)。
顺便说一下,.annotate
会在传递给GROUP BY
的所有未注释字段上生成.values
,在这种情况下为customer__address
和customer__avatar
。
答案 1 :(得分:0)
如果我使用:
orders = Order.objects.select_related('customer').filter(restaurant= request.user.restaurant).annotate(total_order= Count('customer'))
就好了,我想要pablo 1行,但总顺序是2。