【发布时间】:2021-09-16 11:35:19
【问题描述】:
我有一个模型(事件),它有一个外键到用户模型(事件的所有者)。 该用户可以使用以下 ManyToManyField 邀请其他用户:
invites = models.ManyToManyField(
User, related_name="invited_users",
verbose_name=_("Invited Users"), blank=True
)
这个邀请字段生成一个简单的表,包含 ID、event_id 和 user_id。
如果活动所有者删除了他的个人资料,我不希望删除活动,而是将所有权传递给第一个被邀请的用户。
所以我想出了这个功能:
def get_new_owner():
try:
invited_users = Event.objects.get(id=id).invites.order_by("-id").filter(is_active=True)
if invited_users.exists():
return invited_users.first()
else:
Event.objects.get(id=id).delete()
except ObjectDoesNotExist:
pass
这会找到 Event 实例,并返回按 Invite 表 ID 排序的活动受邀用户,因此我可以获取此查询集的第一项,它对应于第一个受邀用户。
为了在用户被删除时运行该函数,我使用了 on_delete=models.SET:
owner = models.ForeignKey(User, related_name='evemt_owner', verbose_name=_("Owner"), on_delete=models.SET(get_new_owner()))
然后我遇到了一些问题:
- 它无法访问我正在传递的字段的 ID
- 我找不到将它用作类方法之类的方法,所以我不得不将函数放在模型之上。显然这意味着它无法再访问它下面的类,所以我尝试将 Event 模型作为函数的参数传递,但无法使其工作。
有什么想法吗?
【问题讨论】:
标签: python django class django-models instance