Django выбор поля с использованием картинок вместо текста не отображается - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь сделать что-то, что должно быть простым, но я не могу заставить его работать должным образом.

Я хотел бы отобразить изображения в виде сетки, скажем, 4-6 изображений на столбец ивозможность выбрать один, а затем нажать кнопку отправки.

Моя модель выглядит так:

class MyPicture(models.Model):
    name = models.CharField(max_length=60,
                            blank=False,
                            unique=True)
    logo = models.ImageField(upload_to='logos')

    def __str__(self):
        return self.name

Моя форма выглядит так:

class MyPictureForm(forms.Form):

    def __init__(self, data, *args, **kwargs):
        super(MyPictureForm, self).__init__(data, *args, **kwargs)
        self.fields['pictures'] = forms.ModelChoiceField(queryset=MyPicture.objects.all())

Мой вид выглядит следующим образом:

def mypicture(request):
    form = MyPictureForm(request.POST or None)

    if form.is_valid():
        #TODO

    return render(request, 'myproj/picture.html', {'form': form})

и, наконец, мой хмтл (где я предполагаю, что проблема лежит):

<form action="{% url 'mypicture' %}" method="post">

    {% csrf_token %}
    {% for s in form.pictures %}
        <option value="{{ s.id }}"><img src="{{ MEDIA_URL }}{{ s.logo.url }}"/></option>      
    {% endfor %}


    <input type="submit" value="Submit" class="btn btn-primary"/>

</form>

Фотографии просто не отображаются.Когда я поставил точку останова, в форме я смог дважды проверить правильность выбора адресов изображений.

Я убежден, что ошибка в HTML, но я не мог понять, где, несмотря намои многочисленные попытки.

Может быть, свежим взглядом, вы заметите это за секунды ... надеюсь, что так!:)

Лучшие:

Эрик

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Где вы определили pictures поле в форме?Или ваша форма forms.ModelForm вместо forms.Form?Я думаю, что вы должны поместить это вне __init__, или, может быть, нам не хватает какой-то части кода.

class MyPictureForm(forms.Form):
    pictures = forms.ModelChoiceField(queryset=MyPicture.objects.all())
0 голосов
/ 14 октября 2018

Вы не создаете элемент select в своем HTML.

<form action="{% url 'mypicture' %}" method="post">

    {% csrf_token %}
    <select name='picture'>
    {% for s in form.pictures.queryset %}
        <option value="{{ s.id }}"><img src="{{ MEDIA_URL }}{{ s.logo.url }}"/></option>      
    {% endfor %}
    </select>


    <input type="submit" value="Submit" class="btn btn-primary"/>

</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...