Django通过对象名称进行注释,该对象名称是ForeignKey

时间:2015-09-06 17:43:32

标签: python django

我有一个代码:

Data.objects.values("code").annotate(Sum("visits"))

我得到了像这样的ValuesQS:

[{'visits__sum': 666, 'code': 4}, {'visits__sum': 15, 'code': 3}, {'visits__sum': 44, 'code': 2}]

这很好,但代码'是一个ForeignKey,在我的ValuesQS中我有一个id,但是我想知道' name'这段代码。代码模型有 str ,后退名称。如何在我的ValuesQS中获得此名称?

1 个答案:

答案 0 :(得分:4)

您可以使用普通的双下划线语法来跟随FK并获取名称字段。

template<typename T>
struct Constifier
{
  typedef T Type;
};

template<typename T>
struct Constifier<T &>
{
  typedef const T &Type;
};

template<typename T>
struct Constifier<T &&>
{
  typedef const T &&Type;
};

template<typename T>
struct Constifier<T *>
{
  typedef const T *Type;
};

template<typename F>
struct ReturnType;

template<typename R, typename ...Ts>
struct ReturnType<R (*)(Ts ...ts)>
{
  typedef R Type;
};

template<typename R, typename T, typename ...Ts>
struct ReturnType<R (T::*)(Ts ...ts)>
{
  typedef R Type;
};

template<typename T, typename F, typename ...Ts>
auto callConstVersion(const T *t, F f, Ts ...ts)
{
  return const_cast<typename Constifier<typename ReturnType<F>::Type>::Type>((const_cast<T *>(t)->*f)(ts...));
}

struct A
{
  A *p;
  A *get() {return p;}
  const A *get() const {return callConstVersion(this, static_cast<A *(A::*)()>(&A::get));}
};