Django的多对多关系

问题描述:

models.pyDjango的多对多关系

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领域之间的关系被设置为在管理页面中,因为它可以在图片中看到,b2(产品)被标记为它属于a2(该类别)。
欢迎任何关于[产品,类别]实施的建议,谢谢。

P.S.
我是Django的新手。对不起我的英语不好。

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

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

您还需要删除related_name="+"属性:由于您遇到冲突,您可能已将其置入,这应该是一个线索。

+0

也可以从Django文档中找到进一步的阅读https://docs.djangoproject.com/zh/dev/topics/db/models/#many-to-many-relationships – Raekkeri 2012-02-04 20:47:07

+0

如果剩下一个m2m字段(例如在类'产品''类别'),如果没有可供选择的字段,我怎么能从'首页>>目录>>类别'设置相关产品属于类别? 我的意思是:创建产品时需要选择一个类别,并且在创建类别时选择产品(属于该类别)。 谢谢。 – ted 2012-02-04 21:23:41

+0

如果没有ManyToManyField(或其他字段可以访问),我仍然无法获得如何将类别应用于产品的问题。简单地说,如果我可以这样做:'my_product.category = some_category'我怎样才能使'my_category.product = some_product'? – ted 2012-02-07 03:56:27