Недавно я обновился до 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 или (b) переноса ее через посредническую (или общую админ) модель?
ТИА. (Я извиняюсь за многословие, это мой первый пост, поэтому хотел быть основательным).