情况:
我在同一项目的两个不同应用程序中有两个Model类。约会中定义的class doctor类是与医生相关联的一组属性,例如姓名,用户名,电子邮件,电话等。DoctorProfilePic类是Clinical.models中定义的Model,其具有存储图像的StdImageField。 doctor具有到DoctorProfilePic的双向映射。
class doctor(models.Model):
docid = models.AutoField(primary_key=True, unique=True) # Need autoincrement, unique and primary
name = models.CharField(max_length=35)
username = models.CharField(max_length=15)
...
profilepic = models.ForeignKey(DoctorProfilePic, blank=True, null=True, on_delete=models.CASCADE)
...
class DoctorProfilePic (models.Model):
id = models.AutoField(primary_key=True, unique=True)
name = models.CharField(max_length=255, blank=True)
pic = StdImageField(upload_to="data/media/%Y/%m/%d", blank=True, variations={
'large': (600, 400),
'thumbnail': (150, 140, True),
'medium': (300, 200),
})
doc = models.ForeignKey('appointments.doctor', blank=True,
null=True, on_delete=models.CASCADE)
预期的响应:
当用户从选择框中选择其中一张个人资料图片,然后单击“删除”时,django应该从医生上传的图片集中删除该图片。
问题:
单击删除按钮时,django会删除图片和医生,而不仅仅是前者。
代码:
def removeprofpic(request, docid):
docid = int(docid)
if not IsOwnerorSuperUser(request, docid):
return HttpResponse("You dont have permissions to do this.")
doc = doctor.objects.get(docid = docid)
if request.method == 'POST':
print(request.POST)
picid = int(request.POST.get('profilepic'))
print(f'doc:{doc} picid:{picid}')
pic = DoctorProfilePic.objects.get(doc = doc, id =picid)
pic.delete()
msg = f"Successfully removed profile picture."
else:
msg = "Not a valid POST"
return HttpResponse(msg)
现在我猜我的问题是定义on_delete = models.CASCADE?有人可以解释我做错了什么吗?
编辑:我需要的是,当删除链接到医生的个人资料图片时,将医生的图片设置为null(SETNULL?),但是当删除医生时,应同时删除doc和pic(CASCADE? )。
答案 0 :(得分:1)
更改
pic.delete()
收件人
pic.file.delete()
编辑:
更改
profilepic = models.ForeignKey(DoctorProfilePic, blank=True, null=True, on_delete=models.CASCADE)
收件人
profilepic = models.ForeignKey(DoctorProfilePic, blank=True, null=True, on_delete=models.DO_NOTHING)