我正在尝试做一些应该很简单的事情,但是我无法使其正常工作。
我想在一个网格中显示图像,比如说每列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})
最后是我的hmtl(我认为问题出在哪里):
<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中,但是尽管我做了很多尝试,但我仍无法弄清错误所在。
也许有新鲜的眼睛,您会在几秒钟内发现它……希望如此! :)
最佳:
埃里克
答案 0 :(得分:0)
您没有在HTML中创建select元素。
<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>
答案 1 :(得分:0)
您在哪里在表单中定义了pictures
字段?还是您的表单是forms.ModelForm
而不是forms.Form
?
我认为您应该将其放在__init__
之外,否则我们可能会丢失部分代码。
class MyPictureForm(forms.Form):
pictures = forms.ModelChoiceField(queryset=MyPicture.objects.all())