こんにちは、私は3番目のモデルを通じてm2m
リンクを持つ2つのモデルがあります:prefetch_relatedを使用してadmin list_displayのカスタム列の関連モデルを取得するにはどうすればよいですか?
class Group(UsefulAbstractModel):
hotels = models.ManyToManyField(
Hotel,
through='HotelDetails',
related_name='groups',)
class Hotel(UsefulAbstractModel):
name = models.CharField(
max_length=255,)
class HotelDetails(models.Model):
hotel = models.ForeignKey(
Hotel,
related_name='hotel_details',)
group = models.ForeignKey(
Group,
related_name='hotel_details',)
num = models.IntegerField(
validators=[
MaxValueValidator(2),
MinValueValidator(1), ],)
すべてのグループは、私がadminグループ・インタフェースに表示する必要がある番号1と2を持つ2つのホテルのリンクがあります。 私は各ホテルには2つのカスタム列を作成:
class GroupAdmin(admin.ModelAdmin):
def first_hotel(self, instance):
return instance.hotel_details.filter(num=1).first().hotel
def second_hotel(self, instance):
return instance.hotel_details.filter(num=1).first().hotel
をしかし、すべてのインスタンスのために、私は今、2つの追加のクエリを持っています。
私はqueryset
メソッドをオーバーライドしようとしたが、助けないで:
def queryset(self, request):
return super(GroupAdmin,self).queryset(request).prefetch_related('hotels')
番号3,4,5などのホテルを追加する予定がない限り、多対多フィールドの代わりに2つの外部キー「Group.hotel1」と「Group.hotel2」を使用する方が簡単かもしれません。 – Alasdair
@Alasdairはい、それは良いかもしれないし、私に多くの時間を節約するかもしれません。しかし、このプロジェクトはほぼ完了しました –