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:

from django import forms

class newAdForm(forms.Form):
    title = forms.CharField(max_length=50)
    descr = forms.CharField(widget=forms.Textarea)
    city = forms.CharField(max_length=30)
    price = forms.FloatField(required=False)
    img = forms.ImageField(required=False)
    dateIn = forms.DateField(auto_now_add=True)
    dateExp = forms.DateField(auto_now_add=True)
    codC = forms.ModelChoiceField(Cat)
    codU = forms.ModelChoiceField(UserProfile)

私の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 %}

どうもありがとう!このコミュニティは最高ですね!:)

4

1 に答える 1

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))

次に、テンプレート (テンプレート ドキュメントのフォームを{{formset}}参照)をに置き換え{{form.as_p}}ます。また、フォームに送信ボタンを追加します。

<form action="" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit" />
</form>
于 2012-04-03T21:46:15.737 に答える