【问题标题】:Django ManyToMany relationshipDjango 多对多关系
【发布时间】:2012-02-26 23:53:34
【问题描述】:

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="+")

在管理页面:

问题:
如何设置models.pyproductscategorym2m字段之间的关系,以便在管理页面中,如图所示,b2(产品)被标记为属于a2(类别)。
欢迎对[产品,类别]的实施提出任何建议,谢谢。

附:
我是 Django 的新手。对不起我的英语。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 也可以从 Django 文档docs.djangoproject.com/en/dev/topics/db/models/…找到进一步阅读
    • 如果剩下一个m2m字段(例如在Productcategory类中),如果没有字段可供选择,我如何设置相关产品属于Home>>Catalog>>Categories的类别从?我的意思是:我需要在创建产品时选择一个类别,并在创建类别时选择产品(属于该类别)。谢谢。
    • 如果没有 ManyToManyField(或其他可访问的字段),我仍然不明白如何将类别应用于产品。简单说说我能不能做到:my_product.category = some_category我怎么能做my_category.product = some_product
    • 正如我在回复中指出的,反向关系中有一个字段:product_set。您不能在 either 方向上使用 = 进行分配,因为它是多对多的,但您可以使用 my_product.categories.add(some_category)my_category.product_set.add(some_product)。这一切当然是fully documented。如果您有任何其他问题,您应该提出一个新问题。
    • @DanielRoseman 这就是我一直在寻找的东西,再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 2012-09-18
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多