Django Framework « Можно ли в админке django отображать ManyToMany связь для обоих моделей?

Есть 2 модели:
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .python.geshi_code {font-family:monospace;} .python.geshi_code .imp {font-weight: bold; color: red;} .python.geshi_code .kw1 {color: #ff7700;font-weight:bold;} .python.geshi_code .kw2 {color: #008000;} .python.geshi_code .kw3 {color: #dc143c;} .python.geshi_code .kw4 {color: #0000cd;} .python.geshi_code .co1 {color: #808080; font-style: italic;} .python.geshi_code .coMULTI {color: #808080; font-style: italic;} .python.geshi_code .es0 {color: #000099; font-weight: bold;} .python.geshi_code .br0 {color: black;} .python.geshi_code .sy0 {color: #66cc66;} .python.geshi_code .st0 {color: #483d8b;} .python.geshi_code .nu0 {color: #ff4500;} .python.geshi_code .me1 {color: black;} .python.geshi_code span.xtra { display:block; }

class Category(models.Model):
    name = models.CharField(_(u"Name"), max_length=50)
    products = models.ManyToManyField("Product", verbose_name=_(u"Products"), blank=True, related_name="categories")

class Product(models.Model):
    name = models.CharField(_(u"Name"), max_length=50)
 

Хочется чтобы была возможность связывать:
  • категорию с товарами на форме редактирования категории
  • товар с категориями на форме редактирования товара
  • чтобы в обоих случаях можно было использовать filter_horizontal

Можно ли такое как-нибудь замутить?

1 ответов


Тоже стало интересно, потратил больше часа на эксперименты и поиски. И таки нашел http://code.djangoproject.com/ticket/897

models.py:


from django.db import models


class Product(models.Model):
    name = models.CharField(max_length=50)
    categories = models.ManyToManyField('Category', through="ProductCategories", blank="True")

    def __unicode__(self):
        return self.name

class Category(models.Model):
    name = models.CharField(max_length=50)
    products = models.ManyToManyField('Product', through="ProductCategories", blank="True")

    def __unicode__(self):
        return self.name

class ProductCategories(models.Model):
    product = models.ForeignKey(Product)
    category = models.ForeignKey(Category)

    class Meta:
        db_table = 'store_product_categories'
        auto_created = Product
 

admin.py:

from django.contrib import admin
from campus.store.models import *


class CategoryAdmin(admin.ModelAdmin):
    list_filter = ['products']
    filter_horizontal = ['products']

class ProductAdmin(admin.ModelAdmin):
    list_filter = ['categories']
    filter_horizontal = ['categories']

admin.site.register(Product, ProductAdmin)
admin.site.register(Category, CategoryAdmin)
 

По крайней мере, в Django 1.2.1 работает.
В более ранних версиях, если не будет работать, наверное, можно попробовать http://www.eivanov.com/2009/01/manytomany-relations-in-django.html

В общем, лействительно, гораздо удобней.