Django 1.2.1 Встроенный администратор для многих многих полей


Answers

Если я правильно помню (и прошло некоторое время с тех пор, как я сделал эту часть), вам нужно добавить администратора для Ingredient и установить его для пользовательской ModelForm. Затем эта форма будет использоваться во встроенной версии Ингредиента.

Question

Недавно я обновился до Django 1.2.1, потому что меня особенно интересовала способность иметь базовые встроенные поля «многие-ко-многим» . При использовании администратора так:

Начальные модели:

class Ingredient(models.Model):
    name = models.TextField()

class Recipe(models.Model):
    ingredients = models.ManyToManyField(Ingredient)

Начальный администратор:

class IngredientInline(admin.TabularInline):
      model = Recipe.ingredients.through

class RecipeOptions(admin.ModelAdmin):
    inlines = [IngredientInline,]
    exclude = ('ingredients',)

admin.site.register(Recipe,RecipeOptions)        

Я получил ту же форму, которую вы обычно видите в поле ManyToMany, с некоторыми дополнительными строками. Поставка его с дополнительными параметрами, такими как Ингредиент ModelForm, не помогла. Подозревая, что что-то может быть неправильно с базовыми ассоциациями ModelForm через model = Foo.manyfields.through, я решил посмотреть, поможет ли промежуточная модель. Теперь он отображает рабочую встроенную форму:

Новые модели:

class RecipeJoin(models.Model):
    pass

class Recipe(models.Model):
    ingredients = models.ManyToManyField(RecipeJoin,through='Ingredient')

class Ingredient(models.Model):  
    name = models.TextField()
    test = models.ForeignKey(RecipeJoin,null=True,blank=True,editable=False)

Новый администратор:

class IngredientInline(admin.TabularInline):
    model = Recipe.ingredients.through

class RecipeOptions(admin.ModelAdmin):
    inlines = [IngredientInline,]

admin.site.register(Recipe,RecipeOptions)

Очевидно, это не хак, который я бы хотел использовать. Кто-нибудь знает способ получения отношения manytomany для отображения через встроенную форму без (a) создания совершенно новой формы и шаблона BasicInline или (б) переноса ее через посредниковую (или общую) административную модель?

ТИА. (Я извиняюсь за многословие, это мой первый пост, поэтому хотелось быть основательным).