如何删除有条件的对象
How delete obj with condition in view
我的模型
class User(models.Model):
name = models.CharField(max_length=50)
surname = models.CharField(max_length=50)
class Phone(models.Model):
user = models.ForeignKey(Osoba, editable=False, related_name='phone', on_delete=models.CASCADE)
phone = models.CharField(max_length=50)
class Email(models.Model):
user = models.ForeignKey(Osoba, editable=False, related_name='email', on_delete=models.CASCADE)
email = models.EmailField()
我希望只有在他的字段中没有值时才能删除对象
def delete_user(request, id):
user = User.objects.get(id=id)
if not user.email or user.phone:
if request.method == 'POST':
user.delete()
print(user.email)
return redirect('list_users')
return render(request,'index-delete.html', {'user': user})
我试过了,但没用
条件是 not user.email.exists() and not user.phone
,因为 not
优先于 and
和 or
:
def delete_user(request, id):
user = User.objects.get(id=id)
if request.method == 'POST':
if <b>not user.email.exists() and not user.phone.exists()</b>:
user.delete()
return redirect('list_users')
return render(request,'index-delete.html', {'user': user})
因此,如果 email
和 phone
均为空白(具有真实性 False
,则此处的 user
将被删除).
我们可以通过在数据库中搜索来提高效率:
def delete_user(request, id):
if request.method == 'POST':
<b>done, __ = user.objects.filter(id=id, email=None, phone=None).delete()</b>
if done:
return redirect('list_users')
user = User.objects.get(id=id)
return render(request,'index-delete.html', {'user': user})
因此,我们在这里对数据库执行 JOIN,通过一次查询即可知道用户是否没有电子邮件和 phone。
我的模型
class User(models.Model):
name = models.CharField(max_length=50)
surname = models.CharField(max_length=50)
class Phone(models.Model):
user = models.ForeignKey(Osoba, editable=False, related_name='phone', on_delete=models.CASCADE)
phone = models.CharField(max_length=50)
class Email(models.Model):
user = models.ForeignKey(Osoba, editable=False, related_name='email', on_delete=models.CASCADE)
email = models.EmailField()
我希望只有在他的字段中没有值时才能删除对象
def delete_user(request, id):
user = User.objects.get(id=id)
if not user.email or user.phone:
if request.method == 'POST':
user.delete()
print(user.email)
return redirect('list_users')
return render(request,'index-delete.html', {'user': user})
我试过了,但没用
条件是 not user.email.exists() and not user.phone
,因为 not
优先于 and
和 or
:
def delete_user(request, id):
user = User.objects.get(id=id)
if request.method == 'POST':
if <b>not user.email.exists() and not user.phone.exists()</b>:
user.delete()
return redirect('list_users')
return render(request,'index-delete.html', {'user': user})
因此,如果 email
和 phone
均为空白(具有真实性 False
,则此处的 user
将被删除).
我们可以通过在数据库中搜索来提高效率:
def delete_user(request, id):
if request.method == 'POST':
<b>done, __ = user.objects.filter(id=id, email=None, phone=None).delete()</b>
if done:
return redirect('list_users')
user = User.objects.get(id=id)
return render(request,'index-delete.html', {'user': user})
因此,我们在这里对数据库执行 JOIN,通过一次查询即可知道用户是否没有电子邮件和 phone。