Django ManyToMany отношения - PullRequest
       8

Django ManyToMany отношения

5 голосов
/ 05 февраля 2012

В models.py :

from django.db import models
from django.utils.translation import ugettext as _

# Create your models here.
class Category(models.Model):
    name            = models.CharField(_(u"Name"), max_length=250)
    products        = models.ManyToManyField("Product", verbose_name=_(u"Products"), \
                      blank=True, null=True, related_name="+")

class Product(models.Model):
    name            = models.CharField(_(u"Name"), max_length=250)    
    category        = models.ManyToManyField("Category", verbose_name=_(u"Category"), \
                      blank=True, null=True, related_name="+")

На странице администратора: m2m relationships

Вопрос:
Как можно установить отношения между полями products и category m2m в models.py так, чтобы на странице администратора, как видно на рисунке, b2 (продукт) был помечено как принадлежащее a2 (категория).
Любые советы по внедрению [продукты, категории] приветствуются, спасибо.

П.С.
Я новичок в Джанго. Извините за мой английский.

1 Ответ

7 голосов
/ 05 февраля 2012

Проблема в том, что у вас есть два поля ManyToMany. Как вы заметили, когда связь установлена ​​в одном из них, она не в другом.

Решение простое: оставьте одно из полей. Вам нужно только ManyToManyField на одной стороне отношений. Django дает вам доступ к другой стороне автоматически. Таким образом, если вы сохранили поле categories в модели Product, вы можете выполнить my_product.categories.all(), чтобы получить категории, с которыми связан продукт; и my_category.product_set.all() для получения товаров, которые относятся к категории.

Вам также нужно будет удалить атрибут related_name="+": вы, вероятно, вставили его, потому что у вас возникали конфликты, что должно было быть подсказкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...