2015-03-09 2 views
0

Я довольно новичок в Django, и я создаю приложение, в котором хранятся таблицы преобразования единиц приложения на мобильном устройстве.django multiple foreignkeys для одного родительского класса

Каждый 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 для одного родительского класса. Есть ли способ указать, что один из них должен быть связан с другим объектом, кроме родителя, или каким-либо другим более подходящим способом для создания раскрывающегося списка из модели?

ответ

Смежные вопросы