【问题标题】:How to permit editing of a many-to-many relationship in the django admin panel如何允许在 django 管理面板中编辑多对多关系
【发布时间】:2011-12-16 04:27:26
【问题描述】:

有一个类似这样的类定义

class someClass(models.Model):
    field1 = models.ForeignKey('other_app.field4')
    field2 = models.ManyToManyField('other_app.field5')
    variable_name  = [1-char choices]
    field3 = models.CharField(max_length=1, choices=variable_name, blank=True)

当我尝试在管理面板中编辑此类时,我得到:

TypeError at /admin/[app]/[someClass]/add/

假设它与 ManytoMany 字段有关,有什么明显的解决方法吗?


更新:好的,所以我发现了问题:我的伙伴编写的代码有一个迭代 __str__ 函数:

def __str__(self):
    str_rep = '%s for ' % (self.field1)
    for p in self.field2:
        str_rep += str(p) + self.field3

关于如何重写这个有什么想法吗?

【问题讨论】:

  • 请提供更多异常详情。
  • TypeError at /admin/[app]/[someClass]/add/ ManyRelatedManager' object is not iterable Request Method: POST Request URL: http://localhost:8000/admin/[app]/[someClass]/add/ Django Version: 1.3.1 Exception Type: TypeError Exception Value: 'ManyRelatedManager' object is not iterable
  • 你能发布回溯吗?我们在这里处于黑暗之中!什么试图迭代许多相关的经理?你确定你没有做过for i in someClass.field2之类的事情吗?

标签: django django-admin many-to-many


【解决方案1】:

以后,请尝试发布实际的回溯和相关的代码行。它会准确地告诉我们这段代码在哪里被破坏了。

field2 不可迭代。您需要通过调用all()filter(...) 从您的ManyRelatedManager 获取QuerySet

https://docs.djangoproject.com/en/dev/topics/db/queries/#many-to-many-relationships

def __str__(self):
    str_rep = '%s for ' % (self.field1)
    for p in self.field2.all():
        str_rep += str(p) + self.field3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2010-12-17
    • 2019-12-31
    相关资源
    最近更新 更多