Django ManyToMany关系

ted*_*ted 5 django many-to-many django-models

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="+")
Run Code Online (Sandbox Code Playgroud)

在管理页面中: m2m关系

问题:
如何设置models.py中的m2productscategorym2 之间的关系,以便在admin-page中,如图所示,(产品)被标记为属于(类别). 欢迎任何有关[产品,类别]实施的建议,谢谢. PS 我是Django的新手.对不起我的英语不好.b2a2



Dan*_*man 6

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

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

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

  • 正如我在回答中所指出的,反向关系中有一个字段:`product_set`.你不能在***方向上使用`=`进行分配,因为它是多对多的,但你可以做`my_product.categories.add(some_category)`和`my_category.product_set.add(some_product)`.所有这些当然是[完整记录](https://docs.djangoproject.com/en/1.3/ref/models/relations/).如果您有任何其他问题,您应该提出一个新问题. (2认同)