【问题标题】:Can't add object to Django's Many-To-Many Field无法将对象添加到 Django 的多对多字段
【发布时间】:2013-08-18 05:25:25
【问题描述】:

我正在尝试使用多对多字段制作应用程序。我写它并且不会尝试它。所以,我启动了 shell 并制作了一些对象,我得到了这个错误。

>>> mzz.controlsOrganization.add(org1, org2)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/fdobrovolny/virtualenv/first/lib/python2.7/site-packages/django/db/models/fields/related.py", line 848, in __get__
through=self.field.rel.through,
  File "/home/fdobrovolny/virtualenv/first/lib/python2.7/site-packages/django/db/models/fields/related.py", line 538, in __init__
(instance, source_field_name))
ValueError: "<MZZ: TEST 1>" needs to have a value for field "mzz" before this many-to-many relationship can be used.

MZZ 类:

class MZZ(models.Model):
    name = models.CharField(max_length=100)
    name.short_decription = u'Název MZZ'
    ident = models.CharField(max_length=45, unique=True)
    active = models.BooleanField()
    active.boolean = True
    kind = models.ForeignKey(kind)
    deliveryDate = models.DateField()
    stateAfterDelivery = models.CharField(max_length=200)
    dateOfCommissioning = models.DateField()
    prescribedParameters = models.CharField(max_length=200)
    responsibleStaff = models.ForeignKey(User)
    dateOfManufacture = models.DateField()
    manufacturer = models.ForeignKey(organization, related_name='manufacturer')
    type = models.CharField(max_length=50)
    serialNumber = models.CharField(max_length=80)
    frequencyOfControls = models.ForeignKey(controls_frequency)
    location = models.CharField(max_length=50)
    methodOfControls = models.CharField(max_length=100)
    controlsOrganization = models.ManyToManyField(organization, related_name='controlsOrganization')
    servisOrganization = models.ManyToManyField(organization, related_name='servisOrganization')

def __unicode__(self):
    return self.name'

组织类:

class organization(models.Model):
    name = models.CharField(max_length=200)
    adress = models.CharField(max_length=200)
    telephoneNumber = models.CharField(max_length=35)
    email = models.EmailField()

    def __unicode__(self):
        return self.name

有人可以帮帮我吗?

【问题讨论】:

  • 附带说明,您可能需要重新考虑使用 related_name。使用与字段相同的名称实际上没有意义。有关此名称语义的更多详细信息,请参阅docs
  • 感谢您的注意。我以前用三个外键解决了它。一个django不支持表中多个forgeinkey指向同一个表(组织),但这可以通过“related_name”来解决。我不知道这是否一定是Many-To-ManyField。
  • 您绝对应该使用related_name,我只是建议您使用更多信息名称,表明它是MZZ's 的集合。例如manufacturer_mzz_setcontrols_mzz_set等。

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


【解决方案1】:

您必须先创建 MZZ 对象并保存()它,然后再添加一个组织。

mzz = MZZ()  # create 
mzz.save()   # save()

o = organization()
o.save()

m.organization.add(o)  # add(o)

https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

【讨论】:

  • 谢谢,我花了很多时间。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 2018-12-29
  • 2016-08-24
相关资源
最近更新 更多