Выпадающий список изображений от модели django ModelForm - PullRequest
0 голосов
/ 04 мая 2020

У меня есть форма, где пользователь может обновить свой профиль. Я хочу, чтобы пользователь выбрал из выпадающего списка все доступные изображения профиля (галерею изображений профиля из модели ProfilePictures), которые они хотят использовать в качестве изображения своего профиля. На данный момент форма возвращает строку URL изображения. Как сделать так, чтобы фактическое изображение отображалось в раскрывающемся списке, чтобы пользователь мог видеть все изображения, прежде чем выбрать желаемое?

Models.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'

Forms.py

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

Изображение текущего выпадающего списка

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете сделать выбор вручную.

Если ваш 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>
...