我想获取我的“集合”对象的模型实例,其中“ request.user”处于“所有者”或“贡献者”关系中,且该对象的ID为“ collection_id”。这是我的代码:
models.py
class Collection(models.Model):
title = models.CharField(max_length=250, unique=True)
owner = models.ForeignKey(User, related_name='owner', on_delete=models.DO_NOTHING)
contributors = models.ManyToManyField(User, related_name='contributors', blank=True)
views.py
def collection_edit(request, collection_id)
...
# Here I want to check if request.user is in contributors or owner
collection = Collection.objects.filter(owner_id=request.user, pk=collection_id).first()
# Do stuff
...
如果删除用户,所有者关系中的'on_delete = models.DO_NOTHING'是否也会破坏我的数据库完整性?
答案 0 :(得分:2)
您可以使用Q
个对象进行过滤:
from django.db.models import Q
Collection.objects.filter(Q(owner=request.user) | Q(contributors=request.user))
因此,我们在这里检索Collection
个对象,其中owner
是request.user
,或 request.user
是其中之一。如果他既是所有者又是贡献者,那么它也将是集合的一部分。
如果删除用户,
on_delete=models.DO_NOTHING
的所有者关系还会破坏我的数据库完整性吗?
是,因为那意味着此时的user_id
字段将包含一个不再存在的用户的主键值。但是,大多数数据库不允许允许这样做,并引发一个IntegrityError
。如果您不希望让Django删除User
,而仍然有Collection
为user
的{{1}},则最好使用PROTECT
。 / p>