【发布时间】:2021-06-18 19:06:09
【问题描述】:
我在 Django 中的 Image 和 ProfileImage 和 ThumbnailStaticImage 类之间有以下继承:
class Image(models.Model):
uuid = models.CharField(max_length=12, default="")
extension = models.CharField(max_length=6, default=None)
filename = models.CharField(max_length=20, default=None)
path = models.CharField(max_length=64, default=None)
class Meta:
abstract = True
def save(self, *args, **kwargs):
if self.uuid is None:
self.uuid = "T" + get_random_string(11).lower()
super(Image, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
delete_message_send(self.path)
super(Image, self).delete(*args, **kwargs)
class ProfileImage(Image):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
def save(self, *args, **kwargs):
if self.extension is None:
self.extension = ".png"
if self.filename is None:
self.filename = self.uuid + self.extension
if self.path is None:
self.path = self.user.path + "/" + self.filename
super(ProfileImage, self).save(*args, **kwargs)
class ThumbnailStaticImage(Image):
video = models.ForeignKey(Video, on_delete=models.CASCADE, default=None)
def save(self, *args, **kwargs):
if self.extension is None:
self.extension = ".png"
if self.filename is None:
self.filename = self.uuid + self.extension
if self.path is None:
self.path = settings.STORAGE.THUMBNAILDIRECTORY + "/" + self.filename
super(ThumbnailStaticImage, self).save(*args, **kwargs)
当我尝试访问应该从 Image 类继承到 ProfileImage 类的扩展变量时,它没有从父类获取该信息。
class CustomProfileImageSignedURL(APIView):
@method_decorator(login_required(login_url='/login/'))
def post(self, request):
profileimage = ProfileImage.objects.
create(user=request.user)
signed_url = get_signed_url_for_upload(
path=profileimage.path,
content_type='image/png')
logging.debug(signed_url);
return Response({
"custom_profile_image_signed_url":signed_url,
"image_uuid":profileimage.uuid})
如果子类没有直接获取父类拥有的字段,继承的目的是什么?
如何从子类的覆盖保存方法访问父类字段?
【问题讨论】:
-
您收到的具体什么错误?
-
请注意,您的
save方法不会保存对象,您需要调用super().save()才能最终将项目保存到数据库中。 -
路径总是只等于“.png”。没有来自用户的 uuid 或路径。
-
如何创建
ProfileImages 和ThumbnailStaticImages?有某种观点,有形式?你能分享一下这方面的细节吗? -
@SuperEye 您似乎期望
uuid在ProfileImage.save方法中有一个值?uuid设置在Image.save方法中,当您调用 super 时,该方法在ProfileImage.save方法的 end 处调用
标签: python django inheritance django-models