2013-07-10 32 views
0

我有以下型號:在模板中包含來自不同模型的ModelForm的最佳方式是什麼?

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

而且

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

我想什麼,能夠做的是一個 )包括在「圖片」模型視圖模板 B中報告的ModelForm )預先填充報告中的圖片字段Modelform與相關圖片

我一直在使用上下文處理器,包括標籤,並試圖通過查詢來傳遞變量打開一個新的頁面,但他們都似乎很複雜,不能正常工作。

我想要幫助的是理解最「django」的方式來做到這一點,以及任何指針來完成這件事。

解決方案

與斯科特的幫助下,工作的解決方案是:

views.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) 
+0

擴展您的CBV'get_context_data','form_valid'和'POST'方法。這將需要一些修補,但最後它會像魅力一樣工作:D –

回答

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本身不提供任何在線表單集的支持,但有一個excellent app that handles most of this for you called django-extra_views.

+0

謝謝,這有助於。我很確定自己很愚蠢,但我不清楚在「圖片」視圖中如何引用'manage_picture'功能 - 您能幫忙嗎? – scaramango

+0

在上面的例子中'def manage_picture'是視圖。您是否使用基於類或功能的視圖? –

+0

我有一個基於類的圖片對象的視圖,但我想在這個視圖中包含報表。我已經瀏覽了django-extra_views應用程序,但我不確定它會對此有幫助嗎?再次感謝。 – scaramango

相關問題