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(最近一次调用最后):文件“a
来自哪里?是User
实例吗?或者你只是给它分配User
类?
这是我的错误。但我也得到一个错误: >>> a = User.objects.filter(username = 'admin') >>> a.opetests.all() Traceback (last recent call last): File "a = User.objects.get(username='admin')
以上是关于Django ManyToManyField 关系的主要内容,如果未能解决你的问题,请参考以下文章
如何通过关系将复选框值保存到 django 中的 ManyToManyField?
ManyToManyField 的 Django OneToOneField 子集
Django:带有“通过”的 InlineAdmin 和 ManyToManyField