0

我有不同的模型:

Cars
Pictures (models.ForeignKey(Cars))
CarsOptions(models.OneToOneField(Cars))

然后我想,那个用户可以添加新车。表格.py:

class NewCarsForm(ModelForm):
    class Meta:
        model = Cars
        exclude = ('checked','user')

在views.py中:

@login_required
def add_car(request):
    form = NewCarsForm(request.POST or None)
    if form.is_valid(): 
        cmodel = form.save()
        cmodel.save()
        return redirect(profile)
    return render(request, 'add_car.html', { 'form': form,})

我有几个问题(是的,我读过这个)。

  1. 如您所见,用户只能添加“汽车”,不能添加图片和选项。如何以一种形式在一个页面上执行此操作?
  2. exclude = ('checked','user'),这意味着,我想用checked=0制作所有新位置,所以我可以过滤它们。而用户字段 - 用户不能在列表中选择用户。如何获取用户 ID(谁添加了汽车)form.save()

谢谢。

更新:

class Pictures(models.Model):
    cars = models.ForeignKey(Cars, related_name='pictures')
    width = models.PositiveIntegerField(editable=False, default=640)
    height = models.PositiveIntegerField(editable=False, default=480)
    image = models.ImageField(upload_to=lambda inst, fname: 'users_img/' + 'cars' + fname, height_field='height', width_field='width', max_length=100)
    def __unicode__(self):
        return str(self.id)
4

1 回答 1

2

表格.py

class NewCarsForm(ModelForm):
    class Meta:
        model = Cars
        exclude = ('checked','user')

PicturesFormset = inlineformset_factory(Cars, Pictures, 
    fields=('field_name', 'field_name'), can_delete=True)

CarsOptionsFormset = inlineformset_factory(Cars, CarsOptions, 
    fields=('field_name', 'field_name'), can_delete=True)

视图.py

@login_required
def add_car(request):
    cars = Cars(user=request.user)
    if request.method == 'POST':
        form = NewCarsForm(request.POST, instance=cars)
        if form.is_valid(): 
            cmodel = form.save()

            picture_formset = PicturesFormset(request.POST, request.FILES,
                instance=cmodel)
            if picture_formset.is_valid():
                picture_formset.save()

            option_formset = CarsOptionsFormset(request.POST, instance=cmodel)
            if option_formset.is_valid():
                option_formset.save()

            return redirect(profile)

    form = NewCarsForm()
    picture_formset = PicturesFormset(instance=Cars())
    option_formset = CarsOptionsFormset(instance=Cars())

    return render(request, 'add_car.html', { 
        'form': form,
        'picture_formset': picture_formset,
        'option_formset': option_formset,
    })

模板

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}

    <h4>Car:</h4>
    {{ form.as_p }}

    <h4>Picture:</h4>
    {{ picture_formset.as_p }}

    <h4>Options:</h4>
    {{ option_formset.as_p }}

    <input type="submit" value="Submit">
</form>
于 2013-03-11T02:19:10.440 回答