【发布时间】:2018-11-27 18:25:41
【问题描述】:
情况:
我有两个模型类,在同一个项目的两个不同应用程序中。在约会.models 中定义的医生类是与医生相关联的一组属性,如姓名、用户名、电子邮件、电话等。DoctorProfilePic 类是在 Clinic.models 中定义的模型,它有一个存储图像的 StdImageField。医生具有到 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? )。
【问题讨论】:
标签: django django-models