Django ManyToManyField 关系

Posted

技术标签:

【中文标题】Django ManyToManyField 关系【英文标题】:Django ManyToManyField relationship 【发布时间】:2011-12-24 08:23:27 【问题描述】:

我有以下 Django 模型:

class opetest(models.Model):
    name = models.CharField(max_length=200)
    people = models.ManyToManyField(User, blank=True)

这种 m2m 关系在用户对象上作为“opetest_set”可用。 如何在 django admin '用户编辑页面' 中编辑这种 m2m 关系?

【问题讨论】:

【参考方案1】:

要在 Django 管理员中编辑 m2m,请使用 InlineModelAdmin。要使用您自己的UserAdmin,您应该先注销User,如下所示:

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

要使opetest 可以从User 实例访问:

class opetest(models.Model):
    name = models.CharField(max_length=200)
    people = models.ManyToManyField(User, blank=True, related_name='opetests')

然后user.opetests.all()

【讨论】:

我只在 opetest 模型中声明了 m2m 字段,但没有扩展 User 模型。那么如何通过 User 模型访问这种 m2m 关系呢? >>> from django.contrib.auth.models import User >>> a = User >>> a.opetests.all() Traceback(最近一次调用最后):文件“ ",第 1 行,在 AttributeError: 'ManyRelatedObjectsDescriptor' 对象没有属性 'all' 它不起作用。 @baobee a 来自哪里?是User 实例吗?或者你只是给它分配User 类? 这是我的错误。但我也得到一个错误: >>> a = User.objects.filter(username = 'admin') >>> a.opetests.all() Traceback (last recent call last): File "", line 1、在 AttributeError: 'QuerySet' object has no attribute 'opetests' @baobee a = User.objects.get(username='admin')

以上是关于Django ManyToManyField 关系的主要内容,如果未能解决你的问题,请参考以下文章

django ManyToManyField多对多关系

如何通过关系将复选框值保存到 django 中的 ManyToManyField?

ManyToManyField 的 Django OneToOneField 子集

Django:带有“通过”的 InlineAdmin 和 ManyToManyField

ManyToManyField对象上的Django可变数量的过滤器?

如何在 Django Admin 中访问 ManyToManyField 的两个方向?