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

Я недавно обновил до Django 1.2.1, потому что я конкретно интересовался способностью иметь основной many-many встроенные поля. При использовании администратора как так:

Первоначальные модели:

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 с помощью модели = 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) проведения его через посредника (или без универсального администратора) модель?

TIA. (Я приношу извинения за многословие, это - мое первое сообщение так хотел быть полным).

12
задан Katharine 30 June 2010 в 20:13
поделиться

2 ответа

Выполняет ли один из этих примеров то, что вы пытаетесь сделать?

a:

# Models:

class Ingredient(models.Model):
    name = models.CharField(max_length=128)

class Recipe(models.Model):
    name = models.CharField(max_length=128)
    ingredients = models.ManyToManyField(Ingredient, through='RecipeIngredient')

class RecipeIngredient(models.Model):
    recipe = models.ForeignKey(Recipe)
    ingredient = models.ForeignKey(Ingredient)
    amount = models.CharField(max_length=128)


# Admin:

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

class RecipeAdmin(admin.ModelAdmin):
    inlines = [RecipeIngredientInline,]

class IngredientAdmin(admin.ModelAdmin):
    pass

admin.site.register(Recipe,RecipeAdmin)
admin.site.register(Ingredient, IngredientAdmin)

b:

# Models:

class Recipe(models.Model):
    name = models.CharField(max_length=128)

class Ingredient(models.Model):
    name = models.CharField(max_length=128)
    recipe = models.ForeignKey(Recipe)


# Admin:

class IngredientInline(admin.TabularInline):
    model = Ingredient

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

admin.site.register(Recipe,RecipeAdmin)
24
ответ дан 2 December 2019 в 06:25
поделиться

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

0
ответ дан 2 December 2019 в 06:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: