2016-04-13 11 views
0

Если предположить, что у меня есть:ManyToManyFields как IntegerFields в Django интерфейс администратора

class Product(models.Model): 
    [...] 

class Basket(models.Model): 
    content = models.ManyToManyField(Product, through="ProductQuantity") 

class ProductQuantity(models.Model): 
    basket = models.ForeignKey(Basket) 
    product = models.ForeignKey(Product) 
    quantity = models.IntegerField(default=0) 

Как я мог отрендерить ModelForm для Basket модели с полем для каждого ProductQuantity из в Basket, просто чтобы быть в состоянии изменить его атрибут quantity ?

Есть ли виджет, который я мог бы использовать для этого?

Если бы я был в состоянии сделать такую ​​вещь, с такой ModelForm, я мог использовать этот ModelForm в admin.ModelAdmin в качестве альтернативного атрибута form иметь такое же поведение в интерфейсе администратора?

Edit:

@MuhammadTahir отмечен этот пост как возможный дубликат this post.

Это действительно помогло мне лучше понять, но я все еще застрял: я не могу отображать поля, которые я хочу отобразить.

Вот мой код до сих пор:

models.py

То же, что и выше.

forms.py

ProductQuantityFormSet = inlineformset_factory(Product, 
               basket.content.through, 
               fields=("quantity",)) 

admin.py

class ProductQuantityInline(admin.StackedInline): 
    model = ProductQuantity 
    formset = ProductQuantityFormSet() 

class BasketAdmin(admin.ModelAdmin): 
    inline = [ProductQuantityInline,] 
+1

Возможный дубликат [Доступ ко многим полям «через» в формах] (http://stackoverflow.com/questions/11021242/accessing-many-to-many-through-relation-fields-in- FormSets) –

ответ

0

Кто-то на IRC нашел проблему:

inlineinlines в admin.ModelAdmin. И мне даже не нужен inlineformset_factory().

Так вот окончательный код:

models.py

class Product(models.Model): 
    [...] 

class Basket(models.Model): 
    content = models.ManyToManyField(Product, through="ProductQuantity") 

class ProductQuantity(models.Model): 
    basket = models.ForeignKey(Basket) 
    product = models.ForeignKey(Product) 
    quantity = models.IntegerField(default=0) 

admin.py

class ProductQuantityInline(admin.StackedInline): 
    model = ProductQuantity 
    fields = ["quantity",] 

class BasketAdmin(admin.ModelAdmin): 
    inlines = [ProductQuantityInline,] 

Я надеюсь, что это может помочь кому-то еще. :)

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

  • Нет связанных вопросов^_^