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)
我是 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)