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)
Хочется чтобы была возможность связывать:
Можно ли такое как-нибудь замутить?
/** * 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
В общем, лействительно, гораздо удобней.