您好我有兩個型號,通過第三種模式m2m
鏈接:如何使用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), ],)
所有羣體有我需要管理員組接口,以顯示它的數字1和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等的酒店,否則有兩個外鍵「Group.hotel1」和「Group.hotel2」而不是多對多字段可能會更簡單。 – Alasdair
@Alasdair是的,它可能會更好,並節省我很多時間。但是這個項目差不多完成了 –