Django 多个外键到同一个父 class

django multiple foreignkeys to the same parent class

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

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

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')

有管理员 classes:

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

class UnitInline(admin.TabularInline):
    model=Unit

现在,无需输入所有潜在单位的所有倍增因子,许多类别中的大多数单位可以构建为其他基本类别的函数,例如,一个简单的例子是:[速度] = [距离] x [时间]^-1。

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

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 成为:

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

class UnitInline(admin.TabularInline):
    model=Unit

class CompoundCategoryInline(admin.TabularInline):
    class=CompoundConversionCategory

毫不奇怪,Django 不喜欢我对同一个父项使用两个外键 class。有没有一种方法可以指定其中一个应该 linked 到与父对象不同的对象,或者其他一些更合适的方法来从模型创建下拉列表?

我相信您正在寻找 admin.InlineModelAdmin.fk_name。 (https://docs.djangoproject.com/en/1.7/ref/contrib/admin/#django.contrib.admin.InlineModelAdmin.fk_name)