django多个外键到同一个父类

时间:2015-03-09 02:32:44

标签: django django-models django-admin

我是Django的新手,我正在创建一个应用程序,用于在移动设备上存储应用程序的单位转换表。

每个UnitCategory可以有多个单位,每个单位都有一个乘法因子,用于在它们之间转换值。目前的模型可以简化为:

class UnitCategory(models.Model):
    name=models.CharField(max_length=100)

class Unit(models.Model):
    name=models.CharField(max_length=200)
    multiplicand=models.FloatField(default=1)
    category=models.ForeignKey('UnitCategory',related_name='units_set')

使用管理类:

class UnitCategoryAdmin(admin.ModelAdmin):
    model=UnitCategory
    inlines=[UnitInline]

class UnitInline(admin.TabularInline):
    model=Unit

现在,不是输入所有潜在单位的所有乘法因子,而是可以将许多类别中的大多数单位构建为其他基本类别的函数,例如,简单的情况是:[速度] = [距离] x [时间] ^ - 1。

我正在尝试添加一个类来提供另一组内联来存储化合物转换的数据。每个内联都有一个下拉列表来选择一个基本单元类别和一个整数字段来输入它被提升到的功率。我知道如何使用ForeignKey创建下拉列表,但我已经使用一个ForeignKey将内联模型链接到UnitCategory,所以我最终得到两个指向同一父类的ForeignKeys:

class CompoundConversionCategory(models.Model):
    parent=models.ForeignKey('UnitCategory',related_name='compounds_set')
    category=models.ForeignKey('UnitCategory',related_name='category_set')
    power=models.IntegerField(default=1)

管理类成为:

class UnitCategoryAdmin(admin.ModelAdmin):
    model=UnitCategory
    inlines=[UnitInline,CompoundCategoryInline]

class UnitInline(admin.TabularInline):
    model=Unit

class CompoundCategoryInline(admin.TabularInline):
    class=CompoundConversionCategory

毫不奇怪,Django不喜欢我将两个ForeignKeys用于同一个父类。有没有办法指定其中一个应该链接到与父项不同的对象,还是从模型创建下拉列表的其他一些更合适的方法?

1 个答案:

答案 0 :(得分:1)