2012-04-03 101 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