0
我在通过多对多关系与其他模型相关的模型中插入数据。我试图用加()在许多一对多申请添加值,但不工作,提高此错误Cannot set values on a ManyToManyField which specifies an intermediary model.
Django中多对多中介的问题
我阅读文档,并发现我们不能对中介模型中使用set(), add(), create()
。
这里是我的模型:
class Venue(MPTTModel):
organisation = models.ForeignKey(Organisation, verbose_name=_('organisation'))
name = models.CharField(_('name'), max_length=100)
description = models.TextField(_('description'), null=True, blank=True)
address = models.ForeignKey(Address, verbose_name=_('address'))
org_users = models.ManyToManyField(PortalUser, through='OrgMapping', verbose_name=_('org users'))
modified_at = models.DateTimeField(_('modified at'), auto_now=True)
class OrgMapping(models.Model):
host_group = models.ForeignKey(OrgHostGroups, verbose_name=_('host group'))
org_user = models.ForeignKey(PortalUser, verbose_name=_('org user'))
venue = models.ForeignKey(Venue, verbose_name=_('venue'))
org_roles = models.ManyToManyField(OrgRole, verbose_name=_('org roles'))
org_permissions = models.ManyToManyField(OrgPermission, verbose_name=_('org permissions'), blank=True)
created_at = models.DateTimeField(_('created at'), auto_now_add=True)
modified_at = models.DateTimeField(_('modified at'), auto_now=True)
is_deleted = models.BooleanField(_('is deleted'), default=False)
def create_org_venue(org, name, desc, address, org_users):
"""
org_users must be a list or portal users pk's
"""
parent = get_or_none(Venue, organisation__name='TeraMatrix')
venue = Venue(organisation=org,
name=name,
description='Head Office',
address=address)
venue.save()
# save org_users to above venue
for user in org_users:
# venue.org_users.add(user)
venue.org_users = get_or_none(PortalUser,pk=user)
venue.save()
return venue
现在,如果我会尝试使用create_org_venue
它会提高错误会场了解创建。任何想法,我怎么能做到这一点
编辑: -
class OrgHostGroups(MPTTModel):
organisation = models.ForeignKey(Organisation, verbose_name=_('organisation'))
name = models.CharField(_('name'), max_length=100)
description = models.TextField(_('description'), null=True, blank=True)
org_users = models.ManyToManyField(PortalUser, through='OrgMapping', verbose_name=_('org users'))
venues = models.ManyToManyField(Venue, through='OrgMapping', verbose_name=_('venues'))
正如你可以看到场馆模型通过映射orgmapping并且还需要orghostgroup并再次需要的场地和映射。所以我们可以说这是一种循环关系。
是的,我发现我需要首先通过映射创建实例。但是我的问题有点复杂。我已编辑我的问题,请你检查 – saf
对不起,我不确定我了解问题。你能不能随意调用'OrgMapping.objects.create()'多次? – Alasdair