Python从外键客户获取用户全名

时间:2016-10-23 10:07:11

标签: python django django-queryset

我希望得到客户的全名,但最后我只得到了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()

感谢。

2 个答案:

答案 0 :(得分:1)

这就是valuesvalues_list方法的工作原理。对于外键,它们将id(或任何唯一字段返回到外键点)。我担心您需要单独获取用户对象,或者不是.values使用.select_related(或.prefetch_related)。

顺便说一下,.annotate会在传递给GROUP BY的所有未注释字段上生成.values,在这种情况下为customer__addresscustomer__avatar

答案 1 :(得分:0)

如果我使用:

orders = Order.objects.select_related('customer').filter(restaurant= request.user.restaurant).annotate(total_order= Count('customer'))

enter image description here

就好了,我想要pablo 1行,但总顺序是2。