Django的多对多关系
问题描述:
在models.py:Django的多对多关系
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="+")
在管理页面:
问题:
如何能在models.py products
和category
M2M领域之间的关系被设置为在管理页面中,因为它可以在图片中看到,b2
(产品)被标记为它属于a2
(该类别)。
欢迎任何关于[产品,类别]实施的建议,谢谢。
P.S.
我是Django的新手。对不起我的英语不好。
答
问题是你有两个 ManyToMany字段。正如你所指出的,当关系在其中一个关系中被设定时,它就不在另一个关系中。
解决方案很简单:删除其中一个字段。您只需要关系一侧的ManyToManyField。 Django可以自动访问另一端。因此,如果您在Product
模型上保留categories
字段,则可以执行my_product.categories.all()
以获取与产品关联的类别;和my_category.product_set.all()
以获得属于某个类别的产品。
您还需要删除related_name="+"
属性:由于您遇到冲突,您可能已将其置入,这应该是一个线索。
也可以从Django文档中找到进一步的阅读https://docs.djangoproject.com/zh/dev/topics/db/models/#many-to-many-relationships – Raekkeri 2012-02-04 20:47:07
如果剩下一个m2m字段(例如在类'产品''类别'),如果没有可供选择的字段,我怎么能从'首页>>目录>>类别'设置相关产品属于类别? 我的意思是:创建产品时需要选择一个类别,并且在创建类别时选择产品(属于该类别)。 谢谢。 – ted 2012-02-04 21:23:41
如果没有ManyToManyField(或其他字段可以访问),我仍然无法获得如何将类别应用于产品的问题。简单地说,如果我可以这样做:'my_product.category = some_category'我怎样才能使'my_category.product = some_product'? – ted 2012-02-07 03:56:27