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 b)用相关图片预填充报告Modelform中的图片字段

我一直在搞乱上下文处理器、包含标签,并试图通过查询字符串将变量传递到新页面,但它们看起来都很复杂并且无法正常工作。

我想要帮助的是理解最'django'的方式来做到这一点,以及完成这项工作的任何指针。

解决方案

在 Scott 的帮助下,可行的解决方案是:

视图.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 回答