私はmanyToManyフィールドのカウントで注文しようとしていますが、TastyPieでこれを行う方法はありますか?例えばDjango TastyPieでアノテーションで注文することは可能ですか?
class Person(models.Model):
friends = models.ManyToMany(User, ..)
私は
が可能ということです... PersonResourceは人が持っている友人の数が発注されたJSONを吐き出すしたいですか?
私はmanyToManyフィールドのカウントで注文しようとしていますが、TastyPieでこれを行う方法はありますか?例えばDjango TastyPieでアノテーションで注文することは可能ですか?
class Person(models.Model):
friends = models.ManyToMany(User, ..)
私は
が可能ということです... PersonResourceは人が持っている友人の数が発注されたJSONを吐き出すしたいですか?
私はTastyPieを使用していませんが、あなたの問題はより一般的なようです。 DjangoのORMクエリでカスタム注文を行うことはできません。あなたはフォームのタプル(Person、friend_count)を保存する方が良いです。これは非常に簡単です:最後の行は、基本的にソートし、人のソートされたリストから人を抽出し
sorted_list = [person for (person, fc) in sorted(p_list, key=lambda x: x[1])]
:
その後p_list = []
for person in Person.objects.all():
friendcount = len(person.friends.all())
p_list.append((person, friendcount))
、あなたはとても似sorted
機能で構築を使用することができます友人の何人も持っていない。
`
私は、これは古い質問ですけど、私は最近、この問題が発生し、解決策を考え出しました。
Tastypieではカスタム注文が簡単にできませんが、使用するクエリセットは簡単に変更できます。 私は実際に、カスタムマネージャーを使用してモデルのデフォルトクエリーセットを変更しました。例えば
:
class PersonManager(models.Manager):
def get_query_set(self):
return super(PersonManager self).get_query_set().\
annotate(friend_count=models.Count('friends'))
class Person(models.Model):
objects = PersonManager()
friends = ...
また、Tastypieで注釈を追加するメタクラスに= ...クエリセットに枯れ、またはget_object_list(自己、リクエスト)メソッドをオーバーライドすることができます。
私はcoaxmetalのソリューションとして注文を得ることができませんでしたので、http://django-tastypie.readthedocs.org/en/latest/cookbook.htmlとしてResourceオブジェクトのget_object_listをオーバーライドすることで、これを別の方法で解決しました。基本的に、「トップ」クエリーストリング・パラメーターが存在する場合、順序付けられた結果が戻されます。
class MyResource(ModelResource):
class Meta:
queryset = MyObject.objects.all()
def get_object_list(self, request):
try:
most_popular = request.GET['top']
result = super(MyResource, self).get_object_list(request).annotate(num_something=Count('something')).order_by('num_something')
except:
result = super(MyResource, self).get_object_list(request)
return result
解決策は見つかりましたか?私は同じ問題を抱えています。 – Burak