我正在try 为一个模型添加注释,该模型包含一个多个字段:
class Link(models.Model):
products = models.ManyToManyField(Product, related_name = "%(class)s_name", related_query_name = "product_link_qs", blank = True)
position = models.ForeignKey(Position, on_delete = models.CASCADE)
class Position(models.Model):
place = models.PositiveIntegerField(unique = True)
store = models.ForeignKey(Store, on_delete = models.CASCADE)
class Store(models.Model):
name = models.CharField("name", max_length = 32)
在我的管理中,我使用annotate()
来组合信息:
@admin.register(Link)
class LinkAdmin(admin.ModelAdmin):
list_display = ["product", "get_store"]
list_filter = ["position__store"]
### extend by product_link_qs related name property to make field sortable in the admin
def get_queryset(self, request):
qs = super().get_queryset(request)
return qs.annotate(storename = Product.objects.filter(product_link_qs = OuterRef("id")).values("store__name"))
@admin.display(description = "store name", ordering = "storename")
def get_store(self, obj):
return obj.storename or None
一个职位只有一个产品链接:
这在测试中的SQLite和生产中的MariaDB中工作得非常好
将第二个产品添加到链接:
在测试中打SQLite分,但给出:MariaDB分django.db.utils.OperationalError: (1242, 'Subquery returns more than 1 row')分