0

我有一个父模型定义为:

class PurchaseOrder(models.Model):
    number =  models.CharField(max_length=30, unique=True)
    def services(self):
       return  self.service_set.filter(purchaseorder=self.pk)

子模型服务定义为:

class Service(models.Model):
    purchaseorder = models.ForeignKey(PurchaseOrder)
    modules = models.ManyToManyField(Module)

    def get_modules(self):
        return self.modules.all()

还有另一个模型 Module 与 Service 模型具有 M2M 关系。我希望将模块显示为父模型 change_list 视图中的列表,即在 list_display 列表中。我怎么做?对数据库命中数有什么影响?

4

1 回答 1

0

使用你的例子,我做这样的事情

class PurchaseOrder(models.Model):
    number = models.CharField(max_length=30, unique=True)

    def get_modules(self):
        return ', '.join([module.FIELD for service.modules.all() in self.service_set.filter(purchaseorder=self.pk) for module in service.modules.all()])

然后在 admin.py

class PurchaseAdmin(admin.ModelAdmin):
    list_display = ('number', 'get_modules')

admin.site.register(Service, ServiceAdmin)

我不确定 db hits 但您可以使用django-debug-toolbar之类的工具来查看在实现它之前和之后生成的 SQL 查询。

根据评论更新

试试上面的列表理解,看看它是否有效?您可能需要稍微调整一下输出才能在 shell 中正确使用它。

于 2012-05-03T16:13:14.847 回答