将 Wagtail 个人资料头像转换为 ImageRenditionField 序列化程序
Wagtail profile avatar into ImageRenditionField serializer
我想使用 ImageRenditionField 序列化来自 Wagtail 管理员的个人资料头像。
根据 的回答,我尝试了这个:
# models.py
class User(AbstractUser):
def get_avatar(self):
return self.wagtail_userprofile.avatar
# serializers.py
class UserSerializer(serializers.ModelSerializer):
avatar = ImageRenditionField('width-190', source='get_avatar')
class Meta:
model = User
fields = ['id', 'username', 'first_name', 'last_name', 'avatar']
我知道了:
Django Version: 3.1.4
Exception Type: AttributeError
Exception Value:
'ImageFieldFile' object has no attribute 'get_rendition'
如何将用户头像放入ImageRenditionField?
你可以做到这一点
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = "__all__
class PersonSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = Person
fields = "__all__"
avatar = serializers.SerializerMethodField("get_avatar_display")
def get_avatar_display(self,info):
return info.wagtail_userprofile.avatar.url
avatar
字段是一个常规的 Django ImageField
。它没有 get_rendition
,它没有任何 Wagtail 再现逻辑。
看看wagtail.users.models.UserProfile.avatar
class UserProfile(models.Model):
...
avatar = models.ImageField(
verbose_name=_('profile picture'),
upload_to=upload_avatar_to,
blank=True,
)
和wagtail.images.models.AbstractImage.file(这是WagtailImage
的基础class)。
class AbstractImage(CollectionMember, index.Indexed, models.Model):
...
file = models.ImageField(
verbose_name=_('file'), upload_to=get_upload_to, width_field='width', height_field='height'
)
注意 avatar
字段是一个常规的 Django ImageField
。 Wagtail 图像是一个 模型,它存储额外的图像信息并处理滤镜、焦点和再现。
您不能将 Wagtail 演绎版与头像字段结合使用,因为头像是 Django ImageField 而不是 Wagtail 图像。
有 various thumbnail packages 为 Django ImageFields 提供 thumbnail/scale 功能。不要调整 UserProfile.avatar
字段本身(自定义 Wagtail)。搜索与普通 ImageFields 兼容的包。
.
我想使用 ImageRenditionField 序列化来自 Wagtail 管理员的个人资料头像。
根据
# models.py
class User(AbstractUser):
def get_avatar(self):
return self.wagtail_userprofile.avatar
# serializers.py
class UserSerializer(serializers.ModelSerializer):
avatar = ImageRenditionField('width-190', source='get_avatar')
class Meta:
model = User
fields = ['id', 'username', 'first_name', 'last_name', 'avatar']
我知道了:
Django Version: 3.1.4
Exception Type: AttributeError
Exception Value:
'ImageFieldFile' object has no attribute 'get_rendition'
如何将用户头像放入ImageRenditionField?
你可以做到这一点
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = "__all__
class PersonSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = Person
fields = "__all__"
avatar = serializers.SerializerMethodField("get_avatar_display")
def get_avatar_display(self,info):
return info.wagtail_userprofile.avatar.url
avatar
字段是一个常规的 Django ImageField
。它没有 get_rendition
,它没有任何 Wagtail 再现逻辑。
看看wagtail.users.models.UserProfile.avatar
class UserProfile(models.Model):
...
avatar = models.ImageField(
verbose_name=_('profile picture'),
upload_to=upload_avatar_to,
blank=True,
)
和wagtail.images.models.AbstractImage.file(这是WagtailImage
的基础class)。
class AbstractImage(CollectionMember, index.Indexed, models.Model):
...
file = models.ImageField(
verbose_name=_('file'), upload_to=get_upload_to, width_field='width', height_field='height'
)
注意 avatar
字段是一个常规的 Django ImageField
。 Wagtail 图像是一个 模型,它存储额外的图像信息并处理滤镜、焦点和再现。
您不能将 Wagtail 演绎版与头像字段结合使用,因为头像是 Django ImageField 而不是 Wagtail 图像。
有 various thumbnail packages 为 Django ImageFields 提供 thumbnail/scale 功能。不要调整 UserProfile.avatar
字段本身(自定义 Wagtail)。搜索与普通 ImageFields 兼容的包。