【问题标题】:Django: multiple models with one-to-many relation on admin page TabularInlineDjango:管理页面TabularInline上具有一对多关系的多个模型
【发布时间】:2020-04-24 11:16:20
【问题描述】:

我在现有数据库中有多个模型,它们都与另一个模型具有多对一关系。例如:

class Collection(models.Model):
        start = models.DateTimeField()
        end = models.DateTimeField(blank=True, null=True)

        class Meta:
            managed = False
            db_table = 'Program'

class ItemA(models.Model):
    collection = models.ForeignKey(
        'Collection', models.CASCADE, db_column='Collection_id')
    ...

    class Meta:
        managed = False
        db_table = 'ItemA'

class ItemB(models.Model):
    collection = models.ForeignKey(
        'Collection', models.CASCADE, db_column='Collection_id')
    ...

    class Meta:
        managed = False
        db_table = 'ItemB'

我想要做的是在集合模型的管理页面上以单个TabularInline 显示这些模型。我还希望能够过滤模型。如果没有数据库中的继承,这可能吗? (我不想添加一般项目表)。在文档中,我只能找到如何将 TabularInline 用于单个模型。所以我的问题基本上是:解决这个问题的最佳方法是什么?是否可以定义某种视图模型 dat 不在数据库中,但可用于显示 TabularInline 中的所有项目?

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    我最终在我的数据库中使用了一个视图,这意味着我不需要添加表。在 Django 中,我创建了一个模型来处理视图:

    class Item(models.Model):
        collection = models.ForeignKey(
            'Collection', models.CASCADE, db_column='Collection_id')
        ...
    
        class Meta:
            managed = False
            db_table = 'Item' # This is not a table, but a view
    

    我使用多个SELECT 语句和UNION 定义了视图:

    CREATE OR REPLACE VIEW `Item` AS
    SELECT CONCAT('itemA_',id) as id, name, ... FROM ItemA 
    UNION
    SELECT CONCAT('itemB_',id) as id, name, ... FROM ItemB
    ...
    

    【讨论】:

      猜你喜欢
      • 2015-09-11
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 2014-05-20
      • 1970-01-01
      • 2019-08-17
      相关资源
      最近更新 更多