0

私はさまざまなモデルを持っています:

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

次に、そのユーザーが新しい車を追加できるようにします。Forms.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. ご覧のとおり、ユーザーは「車」のみを追加でき、写真やオプションは追加できません。1つのフォームの1つのページでこれを行う方法は?
  2. exclude = ('checked','user')、つまり、checked = 0ですべての新しい位置を作成したいので、それらをフィルタリングできます。そして、user-field-ユーザーはリストからユーザーを選択できません。ユーザー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

forms.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)

views.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 に答える