0

私は次のモデルを持っています:

class Picture(models.Model):
    title = models.CharField(max_length=255)
    (etc)

class Report(models.Model):
    complaint = models.TextField()
    picture = models.ForeignKey('Picture')

私ができるようにしたいのは、a) レポート ModelForm を 'Picture' ModelView テンプレートに含める b) レポート Modelform の画像フィールドに関連する画像を事前に入力することです

私はコンテキストプロセッサ、包含タグをいじり、クエリ文字列を介して変数を新しいページに渡そうとしましたが、それらはすべて非常に複雑で、正しく機能していないようです。

私が助けてほしいのは、これを行うための最も「ジャンゴ」な方法と、これを行うための指針を理解することです。

解決

スコットの助けを借りて、実用的なソリューションは次のとおりです。

ビュー.py

def picture(request, slug):
    picture = Picture.objects.get(slug=str(slug))
    d = dict(picture=picture, form=ReportPicture())
    d.update(csrf(request))
    if request.method == 'POST':
        form = ReportPicture(request.POST)
            if form.is_valid():
            report = form.save(commit=False)
            report.picture = picture
            report.save()
            return redirect(picture.get_absolute_url())
    return render_to_response("picture_detail.html", d)
4

1 に答える 1

0

インライン フォームセット ( docs ) が必要だと思います。

# models.py
class Picture(models.Model):
    title = models.CharField(max_length=255)

class Report(models.Model):
    complaint = models.TextField()
    picture = models.ForeignKey('Picture')


# views.py
from django.forms.models import inlineformset_factory
from .models import Picture, Report

def manage_picture(request, pk):
    picture = Picture.objects.get(pk=pk)
    ReportInlineFormSet = inlineformset_factory(Picture, Report)

    if request.method == "POST":
        formset = ReportInlineFormSet(request.POST, request.FILES, instance=picture)

        if formset.is_valid():
            formset.save()
            return HttpResponseRedirect(picture.get_absolute_url())
    else:
        formset = ReportInlineFormSet(instance=picture)

    return render_to_response("manage_picture.html", {"formset": formset})

クラスベースのビューを使用している場合、Django はインライン フォームセットのサポートをネイティブに提供していませんが、このほとんどを処理する優れたアプリがdjango-extra_views.

于 2013-07-10T17:51:58.613 に答える