gpt4 book ai didi

django - 通过表单显示来自 ImageField 的图像

转载 作者:行者123 更新时间:2023-12-01 08:54:59 25 4
gpt4 key购买 nike

前奏 :

Here是显示 ImageField 的最简单方法。假设我的表单中有 10 个字段,我不想在 template.html 中遍历所有字段。只是为了检查它是否是一个 imageField 并以不同的方式显示它。我想通过表单或小部件或类似 this 的方式处理它.所以我想要离开 template.html,因为它是波纹管。

模板.html

<table>
{{ form.as_table }}
</table>

并添加到 模型.py image_tag方法:

class UserProfile(Model):
photo = ImageField(upload_to=PHOTO_DIRECTORY)
contacts = TextField(null=True)
... others

def image_tag(self):
return u'<img src="%s" />' % self.photo.url

image_tag.short_description = 'Image'
image_tag.allow_tags = True

forms.py :

class UserProfileForm(forms.ModelForm):

class Meta:
model = UserProfile
fields = ('contacts', 'photo', 'image_tag', ...others)

我收到一个错误 Unknown field(s) (image_tag) specified for UserProfile这是公平的。

我也试着把它放在 readonly_fields但它们不会以某种方式显示。我必须创建 list_view ?如果是,它应该在哪里?

我在这里想念什么?为什么 image_tag方法应该是模型的一部分而不是形式?模型描述了数据应该如何在数据库中持久化,而不是它应该如何通过表单呈现给用户。这应该是表格的一部分,不是吗?如果我错了,请纠正我。我该如何解决这个问题?任何帮助将不胜感激!

最佳答案

Selcuk提到最简单的解决方案是创建我自己的小部件。

from string import Template
from django.utils.safestring import mark_safe
from django.forms import ImageField

class PictureWidget(forms.widgets.Widget):
def render(self, name, value, attrs=None, **kwargs):
html = Template("""<img src="$link"/>""")
return mark_safe(html.substitute(link=value))

class UserProfileForm(forms.ModelForm):
photo = ImageField(widget=PictureWidget)

关于django - 通过表单显示来自 ImageField 的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28764571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com