0

如何实现一个表单来更新 Car 的数量?我不知道该怎么做。谢谢

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 %}

在forms.py中:

from django import forms

class QuantityForm(forms.Form):
    q = forms.IntegerField

如何创建 ORM 查询来更新数量?

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

4

1 回答 1

1

看起来您会对 FormSets,特别是 InlineFormSets 感兴趣:

https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-an-inline-formset-in-a-view

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

我的图书馆:https ://github.com/AndrewIngram/django-extra-views

然后...

视图.py:

import extra_views 

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

车库.html:

<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>

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

于 2012-10-01T14:10:29.030 回答