使用<form>更新Django中的BooleanField </form>

时间:2014-06-01 20:26:45

标签: django python-2.7

将Django 1.6与Python 2.7一起使用。

我的模型有一个BooleanField变量,我希望用户能够通过POST更改此功能,方法是单击按钮将其从False更改为True,反之亦然。有渲染模板的问题。

模特目前:

class Pic(models.Model):
    Name = models.CharField(max_length=100)
    Good = models.BooleanField()
    Image = models.FileField(upload_to="images/")

    def __unicode__(self):
        return self.Name

应用网址是:

url(r'^(?P<Pic_id>\d+)/$', views.single_picture, name='single_picture'),

在模板中我有:

<form action="{% url 'single_picture' Pic.Good %}" method="post">
    {% csrf_token %}
    {% if Pic.Good %}
    <input type="checkbox" name="choice" id="{{ Pic.Good }}" value="False" />
    <label for="{{ Pic.Good }}">False</label><br />
    {% else %}
    <input type="checkbox" name="choice" id="{{ Pic.Good }}" value="True" />
    <label for="{{ Pic.Good }}">True</label><br />
    {% endif %}
    <input type="submit" value="good" />
</form>

我认为我有:

def single_picture(request, Pic_id):

if request.method == 'GET':
    pic = get_object_or_404(Pic, pk=Pic_id)
    latest_pictures_list = Pic.objects.all()
    return render(request, 'pictures/single_picture.html', {'Pic': pic, 'latest_pictures_list': latest_pictures_list})
elif request.method == 'POST':
    pic = get_object_or_404(Pic, pk=Pic_id)
    latest_pictures_list = Pic.objects.all()
    try:
        selected_choice = p.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Pic.DoesNotExist):
        return render(request, 'pictures/single_picture.html', {'Pic': pic, 'error_message': 'uhhhh...',
        })
    else:
        selected_choice.save()
        return HttpResponseRedirect(reverse('pictures/single_picture.html', {'Pic': pic}))

我不确定此时是否存在多个错误。目前,在尝试查看模板时,我得到了

Reverse for 'single_picture' with arguments '(True,)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

代表'&lt;形式&gt;'线。我猜这与我的观点有关吗?

1 个答案:

答案 0 :(得分:0)

我认为问题出在您的模板中,在

行中

<form action="{% url 'single_picture' Pic.Good %}" method="post">

你在urls.py中的正则表达式是r'^(?P<Pic_id>\d+)/$',我猜它是期望你在Pic请求中返回的GET对象的id而不是布尔值,其中该行应

<form action="{% url 'single_picture' Pic.id %}" method="post">

同样,在下面的行中,id="{{ Pic.Good }}"将显示为HTML id=Trueid=False,我想您不需要。您需要用id="{{Pic.id}}"

替换该位