Django 如何实现表单来更新数量?

Django 如何实现表单来更新数量?,django,django-orm,Django,Django Orm,如何实现表格以更新车辆数量?我不知道怎么做。谢谢 class Car(models.Model): name = models.CharField(max_length=50) price = models.DecimalField() class GarageCar(models.Model): car = models.ForeignKey('Car') garage = models.ForeignKey('Garage') quantit

如何实现表格以更新车辆数量?我不知道怎么做。谢谢

class Car(models.Model):
    name = models.CharField(max_length=50)
    price = models.DecimalField()    

class GarageCar(models.Model):
    car = models.ForeignKey('Car')
    garage = models.ForeignKey('Garage')
    quantity = models.IntegerField()

class Garage(models.Model):
    name = models.CharField("Garage_Name", max_length=30)
    cars = models.ManyToManyField('Car', through='GarageCar', blank=True, null=True)
    owner = models.ForeignKey(User, related_name='owner_garage', verbose_name='Owner Garage')
以这种方式更新数量:

In [2]: c = Car.objects.get(id=1) #here I need car ID

In [3]: g = Garage.objects.get(owner=1)

In [4]: q = 33 #here I need data from form

In [5]: c= GarageCar.objects.filter(car=c, garage=g).update(quantity=q)
观点:

def show(request):
    user = request.user
    garage = Garage.objects.get(owner=user)

    return render_to_response('garage.html', {'garage': garage, 'form':form})
在garage.html中:

{% for item in garage.garagecar_set.all %}
        Car:      {{item.car.name}}
        Price:    {{item.car.price}} 
        Quantity: {{item.quantity}} 
        ID:       {{item.car.id}}
{% endfor %}
<form action="." method="post">
{% csrf_token %}

{{ formset.management_form }}

<table>
{% for form in formset %}
<tr>
<td>{{ form.instance.car.name }}</td>
<td>{{ form.instance.car.price }}</td>
{% for field in form.visible_fields %}
<td>
{{ field }}
</td>
{% endfor %}
<div style="display: none;">
{% for field in form.hidden_fields %}{{ field }}{% endfor %}
</div>
<td>{{ form.quantity }}</td>
<td>{{ form.instance.car.id }}</td>
</tr>
{% endfor %}
</table>


<input type="submit" />
</form>
在forms.py中:

from django import forms

class QuantityForm(forms.Form):
    q = forms.IntegerField
如何创建ORM查询以更新数量


如何在模板中的每辆车旁边显示表单字段(带有“更新”按钮)?

看起来您会对表单集感兴趣,特别是InlineFormset:

如果您想让它变得非常简单(可能是以理解它是如何工作的为代价),您可以将我的通用视图用于这个用例

我的图书馆:

然后

views.py:

import extra_views 

class EditProductReviewsView(extra_views.InlineFormSetView):
    model = Garage
    inline_model = GarageCar
    fields = ('quantity', )
    template_name = 'garage.html'
garage.html:

{% for item in garage.garagecar_set.all %}
        Car:      {{item.car.name}}
        Price:    {{item.car.price}} 
        Quantity: {{item.quantity}} 
        ID:       {{item.car.id}}
{% endfor %}
<form action="." method="post">
{% csrf_token %}

{{ formset.management_form }}

<table>
{% for form in formset %}
<tr>
<td>{{ form.instance.car.name }}</td>
<td>{{ form.instance.car.price }}</td>
{% for field in form.visible_fields %}
<td>
{{ field }}
</td>
{% endfor %}
<div style="display: none;">
{% for field in form.hidden_fields %}{{ field }}{% endfor %}
</div>
<td>{{ form.quantity }}</td>
<td>{{ form.instance.car.id }}</td>
</tr>
{% endfor %}
</table>


<input type="submit" />
</form>

{%csrf_令牌%}
{{formset.management_form}
{formset%中表单的%s}
{{form.instance.car.name}
{{form.instance.car.price}
{%form.visible_fields%}
{{field}}
{%endfor%}
{%for form.hidden_fields%}{{field}{%endfor%}
{{form.quantity}}
{{form.instance.car.id}
{%endfor%}

我没有测试过这个示例,我记不起是否需要将id字段添加到
字段
元组。但是基本要点应该是正确的。

您看过表单文档了吗?请说出你特别感到困惑的地方。是的。我在Django文档中阅读了对表单的描述。我的问题是:1。如何创建ORM查询以更新数量?2.如何在模板中的每辆车旁边显示表单字段(带有“更新”按钮)?请随便,谢谢你的回答。我想从头开始。如何简单地使用InlineFormset?在链接中的示例(Django docs one)中,只需将Author更改为Garage,将Book更改为GarageCar,并将instance更改为您关注的特定车库。模板逻辑应该与我发布的相同。您还可以将as fields参数传递给inlineformset_工厂,这允许您以与我的示例相同的方式限制字段。