【发布时间】:2014-01-15 07:51:45
【问题描述】:
拜托,我有一个类似的案例,我会介绍他们,希望你能帮助我理解和正确处理这个案例。
我有一个简单的模型案例:
# -*- coding: utf-8 -*-
from django.db import models
class City(models.Model):
name = models.CharField("City", max_length=100, blank=False, null=False)
state = models.CharField("State", max_length=2, blank=False, null=False)
class Neighborhood(models.Model):
name = models.CharField("Name", max_length=100, blank=False, null=False)
city = models.ForeignKey(City, blank=False, null=False)
模型形式:
from django import forms
from app.models import *
class CityForm(forms.ModelForm):
class Meta:
model = City
class NeighborhoodForm(forms.ModelForm):
class Meta:
model = Neighborhood
state = forms.CharField("State", max_length=2, required=True)
他们的看法:
城市景观:
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
from app.forms import CityForm
from app.models import City
STATES = ["AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MT", "MS", "MG", "PR",
"PB", "PA", "PE", "PI", "RJ", "RN", "RS", "RO", "RR", "SC", "SE", "SP", "TO"]
def index(request):
if "submit" in request.POST:
form = CityForm(request.POST, request.FILES)
if form.is_valid():
form.save(commit=True)
elif "cancel" in request.POST:
return HttpResponseRedirect("/")
else:
form = CityForm()
cities = City.objects.all()
data = {
"form": form,
"states": STATES,
"cities": cities
}
return render_to_response("city/index.html", data, context_instance=RequestContext(request))
还有邻居视图:
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext
from app.forms import NeighborhoodForm
from app.models import Neighborhood, City
from app.city.views import STATES
def index(request):
if "submit" in request.POST:
form = NeighborhoodForm(request.POST, request.FILES)
if form.is_valid():
form.save(commit=True)
elif "cancel" in request.POST:
return HttpResponseRedirect("/")
else:
form = NeighborhoodForm()
neighborhoods = Neighborhood.objects.all()
cities = City.objects.all()
data = {
"form": form,
"states": STATES,
"cities": cities,
"neighborhoods": neighborhoods
}
return render_to_response("neighborhood/inserir.html", data, context_instance=RequestContext(request))
最后是 Neighborhood 的模板:
{% extends "base.html" %}
{% block content %}
<form action="" method="post" id="neighborhoodForm" name="neighborhoodForm">
{% csrf_token %}
<div>
<label>State:</label>
<select id="state" name="state" autofocus="autofocus">
<option value=""></option>
{% for item in states %}
<option value="{{ item }}"
{% if item == form.state.value %}
selected="selected"
{% endif %}>{{ item }}</option>
{% endfor %}
</select>
</div>
<div>
<label>City:</label>
<select id="city" name="city">
<option value=""></option>
{% for item in cities %}
<option value="{{ item.id }}"
{% if item.id == form.city.value|add:0 %}
selected="selected"
{% endif %}>{{ item.name }}</option>
{% endfor %}
</select>
</div>
<div>
<label>Neighborhood Name:</label>
<input type="text" id="name" name="name" value="{{ form.name.value|default_if_none:"" }}"/>
</div>
<div>
<button type="submit" id="submit" name="submit" value="submit">Submit</button>
<button type="submit" id="cancel" name="cancel" value="cancel">Cancel</button>
</div>
</form>
<br/>
<table border="1">
<tr>
<th>Neighborhood Name</th>
<th>City</th>
<th>State</th>
</tr>
{% for item in neighborhoods %}
<tr>
<td>{{ item.name }}</td>
<td>{{ item.city.name }}</td>
<td>{{ item.city.state }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
考虑到社区,我的困难。我有 City 和 State 字段,它们位于过滤器的社区模板中。
要添加一条记录我没有问题,但是一个简单的帖子不会再次将 NeighborhoodForm 的“状态”中的值返回到模板。那是因为在帖子中发送的值没有找到表单的“状态”字段。
当您打开一条记录进行编辑时,会发生同样的事情,即“状态”字段不会被填充。
所以这是我的问题。你能帮助我吗?我该怎么做或我做错了什么? 感谢大家提供的帮助。
【问题讨论】:
-
您在
Neighborhood表单中将state保存在哪里?模型没有任何这样的字段来存储值。 -
我将在 ModelForm NeighborhoodForm 中传递字段
**state = forms.CharField (" State ", max_length = 2, required = True)**的值。 Neighborhood Model 没有“state”字段,因为该字段已经是 City 的子类。我没有提出他是没有冗余的,主要是因为数据库中会有一个字段。 -
@Arpit,在这种情况下,为了让您更好地理解,我想我需要知道如何将“州”字段模型城市与“州”字段 NeighborhoodForm 连接起来。
标签: python django python-2.7 django-forms django-1.5