0

我有一个表格,用户可以在其中更新他们的个人资料。我希望用户从所有可用的个人资料图片(来自模型的个人资料图片库)的下拉列表中进行选择ProfilePictures,他们希望作为他们的个人资料图片。目前,表单返回图像 URL 的字符串。如何使实际图像位于下拉列表中,以便用户在选择他们想要的图像之前可以看到所有图像?

模型.py

class ProfilePicture(models.Model):
image = models.ImageField(upload_to='profile_pics', blank=True)

def __str__(self):
    return f'{self.image.url}'


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(default=' Your Bio   ', max_length=200)
    pic = models.ForeignKey(ProfilePicture, on_delete=models.SET_DEFAULT, default='1')

    def __str__(self):
        return f'{self.user.username} Profile'

表格.py

class ProfileUpdateForm(forms.ModelForm):
class Meta:
    model = Profile
    fields = ['bio','image','pic']
    # widgets = {
    #     'pic': ImageField(),
    # }

当前下拉列表的图像

4

1 回答 1

0

您可以手动呈现选择。

如果你ModelForm看起来像这样:

class ProfileUpdateForm(forms.ModelForm):

    class Meta:
        model = Profile
        fields = ['bio','pic']

那么您可以pic在模板中将此字段呈现为:

<form method="post" action="" >
    {% csrf_token %}>

    <select name="{{ form.pic.name }}">
        {% for q in form.pic.field.queryset %}
            <option value="{{ q.pk }}"><img src={{ q.url }}></img></option>
        {% endfor %}
    </select>

    # ..
    # add other fields
</form>
于 2020-05-04T11:50:15.557 回答