python - 如何在视图中删除带有条件的obj
问题描述
我的模型
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
and or
:
def delete_user(request, id):
user = User.objects.get(id=id)
if request.method == 'POST':
if not user.email.exists() and not user.phone.exists():
user.delete()
return redirect('list_users')
return render(request,'index-delete.html', {'user': user})
因此,如果和均为空白(具有真实性),则此处user
将被删除。email
phone
False
我们可以通过在数据库中搜索来提高效率:
def delete_user(request, id):
if request.method == 'POST':
done, __ = user.objects.filter(id=id, email=None, phone=None).delete()
if done:
return redirect('list_users')
user = User.objects.get(id=id)
return render(request,'index-delete.html', {'user': user})
在这里,我们因此在数据库上执行 JOIN,以便通过一次查询知道用户是否没有电子邮件和电话。
推荐阅读
- jquery - 当其内联css为显示块时平滑跳转到目标div
- compiler-errors - 找到预期的 XYZ ()
- android - Appium 自动化 - 方法尚未实现
- r - 在 data.table 中按顺序填充空白
- python - 如何在两个不同的字典中显示具有值的键?
- java - 如何在 c++ 和 java 之间通过 udp 有效发送数据数组
- sparql - SPARQL 查找具有相同最大值的所有元组
- sap - 用于提取足球比赛结果以自动插入数据库的工具/API
- python - 如何使用具有不同输入形状的批次制作神经网络
- c++ - C++。候选模板被忽略 - 无法将数组类型与自身匹配