Django ManyToMany关系

时间:2012-02-04 20:36:28

标签: django django-models many-to-many

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

问题:
    如何设置 models.py productscategory m2m字段之间的关系,以便在admin-page中,如图所示,{{1 (产品)被标记为属于b2(类别) 欢迎任何有关[产品,类别]实施的建议,谢谢。

附:
我是Django的新手。抱歉我的英文。

1 个答案:

答案 0 :(得分:7)

问题是您有两个 ManyToMany字段。正如您所指出的那样,当关系设置在其中一个中时,它就不在另一个中。

解决方案很简单:删除其中一个字段。您只需要在关系的一侧使用ManyToManyField。 Django让您自动访问另一方。因此,如果您在categories模型上保留Product字段,则可以my_product.categories.all()获取与产品相关联的类别;和my_category.product_set.all()获取属于某个类别的产品。

你还需要删除related_name="+"属性:你可能会把它放进去,因为你遇到了冲突,这应该是一个线索。