【问题标题】:Many To Many Fields in DjangoDjango中的多对多字段
【发布时间】:2014-06-28 02:44:49
【问题描述】:

我是 Django 新手,在 Django 中与管理员一起使用 ManyToManyFields 时遇到一个问题。

所以我有两个模型类。

class Tag(models.Model):
    tag = models.CharField(max_length=100)
    def __str__(self):
        return self.tag
    class Meta:
        ordering = ['tag']
        verbose_name = "tag"
        verbose_name_plural = "tags"

class MyiPhoneApp(models.Model):
    tags = models.ManyToManyField(Tag)

    name = models.CharField(max_length=200)
    bundleID = models.CharField(max_length=200, primary_key=True)
    def __str__(self):
        return self.name
    class Meta:
        ordering = ['name']
        verbose_name = "iPhone App"
        verbose_name_plural = "iPhone Apps"

因此,当我将此类注册到管理员时,我可以添加一些 iPhone 应用程序。但是在添加一个带有 2 个标签的应用程序并保存后,当我添加第二个或更多应用程序时会发生一些奇怪的事情。

每个应用都有每个标签属性。

我认为多对多字段是表示这一点的正确关系。

一个应用有很多标签,一个标签有很多应用

但是现在每个 App 都分配了来自 db 的每个可用标签,这种行为是错误的:/

我的关系有问题还是我忘记了要添加到我的(模型)代码中的内容?

【问题讨论】:

  • 您发布的代码不会导致此行为。您可以发布任何其他相关代码吗?可能是 Admin.py,任何形式,以及任何覆盖的保存功能
  • 抱歉,我必须排除这种可能性,您是通过 shell 还是通过管理员检查与应用程序相关的标签?如果是通过管理员,您确定标签被选中而不只是显示在小部件中吗?

标签: django django-admin django-orm manytomanyfield


【解决方案1】:

项目名称为“helloworld_2”,应用名称为“MyApps”,使用manage.py start app创建

在 settings.py 中,“MyApps”在 INSTALLED_APPS 中

在 MyApps 的 models.py 中,代码在我上面的第一篇文章中。

在 MyApps 的 admin.py 中有四行代码:

from django.contrib import admin
from MyApps.models import Tag, MyiPhoneApp

# Register your models here.

admin.site.register(Tag)
admin.site.register(MyiPhoneApp)

就是这样。在 syncdb 并运行服务器后,我转到 localhost:8000/admin

我创建的第一个应用是: 名称:“BlahBlah 应用程序” bundle_id: "com.mir.msg.blah"

带有标签:“通信”和“信使”

保存后,我想创建第二个应用程序。 就是这样,“通讯”和“信使”这 2 个标签会自动出现在“标签”字段中。

新应用,没有我的任何输入,有两个标签显示

【讨论】:

  • 这应该被添加到问题中,而不是答案。但是您显示的屏幕截图只是将这两个标签添加到该应用程序中。您可以看到它们都没有被选中,它们实际上都没有与应用程序关联。
【解决方案2】:

实际上,您没有选择任何选项。这只是您可以选择标签的列表。如您所见,如果您在月球的苹果一侧,则可以使用 ctrl 或 cmd 选择一个或多个选项。

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 2011-02-05
    • 2020-10-28
    • 2017-08-13
    • 2011-01-14
    • 2021-11-20
    • 2016-02-23
    • 2016-03-21
    相关资源
    最近更新 更多