2010-06-30 23 views
12

Son zamanlarda Django 1.2.1'e yükselttim çünkü özellikle have basic many-to-many inline fields yeteneğiyle ilgileniyordum.Django 1.2.1 Birçok Alana Çok Sayıda Inline Admin

İlk modeller: şöyle yönetici kullanırken

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

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

Başlangıç ​​Yönetici: Ben bazı ekstra ile, normalde bir ManyToMany sahada görürdünüz aynı form oldu ne var

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

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

admin.site.register(Recipe,RecipeOptions)   

satırlar. Bir Hammadde ModelForm gibi ek parametreler ile tedarik yardımcı olmadı. Model = Foo.manyfields.through ile temel ModelForm ilişkilerinde bir sorun olabileceğinden şüphelenerek, bir aracı modelin işe yarayıp yaramayacağına karar verdim.

Yeni modeller: Şimdi üzerinden bir çalışma satır içi form görüntüler

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) 

Yeni yönetici:

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

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

admin.site.register(Recipe,RecipeOptions) 

Açıkçası bu benim kullanmak istiyorum kesmek değildir. (A) Tamamen yeni bir BasicInline formu ve şablonu oluşturmadan veya (b) bir aracı (veya genel yönetici) modeline koymadan, satır içi biçimiyle görüntülenecek çok-yollu bir ilişki elde etmenin bir yolu var mı?

TIA. (Ayrıntılardan dolayı özür dilerim, bu benim ilk mesajımdır, bu yüzden eksiksiz olmak istedim).

cevap

23

Bu örneklerden biri, yapmaya çalıştığınız şeyi gerçekleştirir mi?

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:

Ben de düşündüm, ama denedim ve damla çıkışlar aynı listeyi ne var
# 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) 
+0

Evet, sonunda bir ForeignKey'e yerleşmeye karar verdim, ama aslında bir ManyToMany alanıyla çalışacak bir inline form arıyordum çünkü django 1.2 belgelerinin söylediği gibi ... Yine de bu işlerin her ikisi de teşekkürler! – Katharine

0

Doğru bir şekilde hatırlıyorum (ve bu kısmı yaptığımdan beri uzun bir süre geçtiyse), söz konusu öğeyi yöneticiye eklemeniz ve özel Model Formuna sahip olması için ayarlamanız gerekir. Daha sonra bu form Malzemenin satır içi sürümünde kullanılacaktır.

+0

. Çok tuhaf. – Katharine