0

アクティビティと場所の2つのモデルがあります。Activityモデルには、PlaceモデルへのReferencePropertyがあります。

これはPlaceテーブルが大きくなり始めるまでは正常に機能していましたが、django adminを介してアクティビティを編集しようとすると、Googleからメモリエラーが発生します(アクティビティ管理者のフィールドセットからそのフィールドを削除しても発生しません)

RefrencePropertyの編集に使用されるウィジェットは、Place.all()を使用して可能な値を取得します。ActivityとPlaceの両方がcityプロパティによってシャーディングされているため、Place.all()から関連する場所だけにウィジェットの選択クエリを最適化したいと思います(Place.all()。filter( "city ="、))。

ドキュメントでクエリをオーバーライドする方法が見つかりませんでした。上記が可能かどうか疑問に思っていましたか?もしそうなら、どのように?

4

1 に答える 1

0

管理フォームをオーバーライドすることにより、クエリを最適化することができました。

class ActivityAdminForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ActivityAdminForm, self).__init__(*args, **kwargs)        
        self.fields['place'].queryset = <... my query ...>


class ActivityAdmin(admin.ModelAdmin):
    form = ActivityAdminForm
于 2010-01-22T14:16:05.517 に答える