5

私は次のモデルを持っています:

class UserProfile(models.Model):
  name = models.CharField()
  info = models.OneToOneField(UserInfo, related_name='user')

class UserInfo(models.Model):
  def __unicode__(self):
    return self.user.__unicode__() + self.age
  age = models.IntegerField()

class Ticket(models.Model):
  userinfo = models.ForeignKey(UserInfo)

問題は現在、チケット管理インターフェースにあります。チケットの userinfo フィールドはドロップダウンとして表示されます。データベースに多数の UserInfo がある場合、それらのすべてがデータベース (UserProfile) に対して単一の呼び出しを行い、その名前を生成します。

UserInfo ドロップダウンをレンダリングするときに、管理者 (または任意のウィジェット) に関連する UserProfiles をプリフェッチするように指示するにはどうすればよいですか?

私は次のようなものを探しています

info = models.OneToOneField(UserInfo, related_name='user', prefetch_in_bulk=True)
4

1 に答える 1

8

これを行う1つの方法を見つけました:

class TicketAdminForm(forms.ModelForm):
  class Meta:
    model = Ticket
  userinfo = forms.ModelChoiceField(queryset=UserInfo.objects.prefetch_related('user').all())

class TicketAdmin(admin.ModelAdmin):
  form = TicketAdminForm

admin.site.register(Ticket, TicketAdmin)

必要なモデルは、多くのクエリではなく、1 つの SQL クエリとしてプリフェッチされるようになりました。

于 2013-03-24T08:49:47.407 に答える