如何将以下内容组合成python中的循环?
try:
[fb.delete() for fb in FacebookProfile.objects.filter(user_id=user.id)]
except FacebookProfile.DoesNotExist:
pass
try:
[fb.delete() for fb in FacebookUser.objects.filter(user_id=user.id)]
except FacebookUser.DoesNotExist:
pass
try:
[fb.delete() for fb in FacebookLike.objects.filter(user_id=user.id)]
except FacebookLike.DoesNotExist:
pass
try:
[fb.delete() for fb in FacebookInvite.objects.filter(user_id=user.id)]
except FacebookInvite.DoesNotExist:
pass
我们可以看到它是相同的代码块,只是每个类名都在改变,所以我希望迭代一个类名数组,并通过生成的函数运行每个代码块,其语义与上面相同。
答案 0 :(得分:5)
for klass in [FacebookProfile, FacebookUser, FacebookLike, FacebookInvite]:
try:
for fb in klass.objects.filter(user_id=user.id):
fb.delete()
except klass.DoesNotExist:
pass
答案 1 :(得分:3)
你可以迭代元组:
for klass in FacebookProfile, FacebookUser, FacebookLike, FacebookInvite:
try:
for ob in klass.objects.filter(user_id=user.id):
ob.delete()
except klass.DoesNotExist:
pass
答案 2 :(得分:0)
(我猜这些是django模型。)
如果这些模型彼此之间存在外键关系,则删除顶级模型应删除其余部分。因此,如果FacebookUser是您的顶级模型,则跟随调用应删除其余模型。 (猜猜用户和FaceBookUser有一对一的关系)
FaceBookUser.objects.get(user_id=user.id).delete()
但这是很多猜测。如果这些猜测中的部分或全部错误,您应该使用Querysets删除方法https://docs.djangoproject.com/en/dev/ref/models/querysets/#delete
FaceBookUser.objects.filter(user_id=user.id).delete()
FaceBookProfile.objects.filter(user_id=user.id).delete()
FaceBookLike.objects.filter(user_id=user.id).delete()
FaceBookInvite.objects.filter(user_id=user.id).delete()
这将运行4个查询并删除每个查询的多行。你应该避免使用orm模型的for循环。