2012-04-03 163 views
0

我正在將我的第一步驟移到Django中,我試着按照此鏈接中的教程:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/ 但我無法獲取表單。它只是返回一個白頁!從模型創建表格

有人可以解釋,如果我失去了一些東西?

我的models.py:

from django.db import models 
from django.forms import ModelForm 

class UserProfile(models.Model): 
    name = models.CharField(max_length=30) 
    surname = models.CharField(max_length=30) 
    email = models.EmailField() 
    tel = models.CharField(max_length=30, null=True, blank=True) 
    def __unicode__(self): 
     return '%s %s' % (self.surname, self.name) 

class Ad(models.Model): 
    title = models.CharField(max_length=50) 
    descr = models.TextField() 
    city = models.CharField(max_length=30) 
    price = models.FloatField(null=True, blank=True) 
    img = models.ImageField(upload_to='./uploaded_imgs', null=True, blank=True) 
    dateIn = models.DateField(auto_now_add=True) 
    dateExp = models.DateField(auto_now_add=True) 
    codC = models.ForeignKey('Cat') 
    codU = models.ForeignKey('UserProfile') 
    def __unicode__(self): 
     return '%s - %s' % (self.title, self.dateIn) 

class Cat(models.Model): 
    cat = models.CharField(max_length=35, primary_key=True) 
    def __unicode__(self): 
     return self.cat 

我forms.py:

​​

我views.py:

from django.contrib.auth import authenticate, login, logout 
from django.contrib.auth.models import User 
from django.shortcuts import render_to_response, get_object_or_404, redirect 
from django.template import RequestContext 
from django.http import HttpResponse 
from django import forms 
from models import * 
from django.forms import * 
from django.forms.models import modelformset_factory 

[...] 

def newAd(request): 
    newAdFormSet = modelformset_factory(Ad) 
    if request.method == 'POST': 
     formset = newAdFormSet(request.POST, request.FILES) 
     if formset.is_valid(): 
      formset.save() 
      return render_to_response('conf.html', {'state':'Your ad has been successfull created.'}, context_instance = RequestContext(request),) 
    else: 
     formset = newAdFormSet() 
    return render_to_response('ad_form.html', context_instance = RequestContext(request),) 

我ad_form_auto.html模板:

{% extends "base.html" %} 
{% block title %}Ads insertion form{% endblock %} 
{% block content %} 
    {% if error_message %} 
     <p><strong>{{ error_message }}</strong></p> 
    {% endif %} 
<form method="post" action=""> 
    {{ formset }} 
</form> 
{% endblock %} 

非常感謝!這個社區看起來很棒! :)

回答

2

您沒有將表單傳遞給模板 - 目前,包含表單的「formset」變量不包含在傳遞給視圖的datadict中。

return render_to_response('ad_form.html', context_instance = RequestContext(request),) 

應包括的數據(見render_to_response() docs)在這裏我已經改名爲形式的數據,並在您的模板「形式」爲便於命名:

return render_to_response('ad_form.html', 
          {'form':formset}, 
          context_instance=RequestContext(request)) 

然後,在你的模板(見forms in templates docs)將{{formset}}替換爲{{form.as_p}}。還要向表單添加一個提交按鈕。

<form action="" method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Submit" /> 
</form> 
+0

我在登錄功能上遇到了csrf問題,所以我暫時禁用了它。與它的工作形式很好,而不是!所以,我現在正在工作的形式,而不是一個獨特的白色形式,我收到2種形式:一個填充一個老元組和一個白色。我應該只收到空白的正確的?有沒有其他錯誤? – Mark 2012-04-05 23:18:03