【发布时间】:2015-07-13 18:04:53
【问题描述】:
在我的模型中,我有以下 M2M 字段
class FamilyMember(AbstractUser):
...
email_list = models.ManyToManyField('EmailList', verbose_name="Email Lists", blank=True, null=True)
...
EmailList 表如下所示:
class EmailList(models.Model):
name = models.CharField(max_length=50, default='My List')
description = models.TextField(blank=True)
is_active = models.BooleanField(verbose_name="Active")
is_managed_by_user = models.BooleanField(verbose_name="User Managed")
在应用程序中,用户应该只能看到 is_active=True 和 is_managed_by_user=True 的记录。
在管理员方面,管理员应该能够将用户添加到任何/所有这些组,而不管 is_active 和 is_managed_by_user 标志。
发生的情况是管理员将用户分配给所有电子邮件列表记录。然后,用户登录并只能看到列表的子集(is_active=True 和 is_managed_by_user=True)。这是预期的行为。然而,接下来的不是。
用户取消选择电子邮件列表项,然后保存记录。由于 M2M_Save 在调用 save() 之前首先清除了所有 m2m 记录,因此我丢失了管理员分配给该用户的所有记录。
我怎样才能保留这些?我尝试创建多个列表,然后在保存之前合并它们,我尝试将整个列表传递给模板,然后隐藏 is_managed_by_user = False 的列表,我就是无法工作。
这对我来说更加棘手的是,这一切都包含在一个表单集中。
您将如何编写此代码?正确的方法是什么?我是否过滤掉用户不应该在我的视图中看到的记录?如果是这样,我如何在保存用户所做的任何更改之前合并这些丢失的记录?
【问题讨论】:
标签: django django-forms django-views