Modelform不打印一对多关系的字段

时间:2011-03-29 01:54:17

标签: python django google-app-engine django-forms

要点: 我在模型之间有1到多个层次关系

国家/地区(1) - >城市(许多)

城市(1) - >状态(很多)

我有一个表单,打算打印属于所有这些模型的字段,但是当我打印时,我只看到“city”字段,它也显示为下拉列表而不是显示为文本框。我试图寻找这个问题,但没有出现解决方案。

代码摘录:

from google.appengine.ext import db
from google.appengine.ext.db import djangoforms 

class UserReportedCountry(db.Model):
  #country selected by the user
  country_name = db.StringProperty( required=True,
                          choices=['Afghanistan','Aring land Islands']
                         )

class UserReportedCity(db.Model):
  country = db.ReferenceProperty(UserReportedCountry, collection_name='cities')
  city_name = db.StringProperty(required=True)   

class UserReportedStatus(db.Model):
  city = db.ReferenceProperty(UserReportedCity, collection_name='statuses')
  status = db.BooleanProperty(required=True)
  date_time = db.DateTimeProperty(auto_now_add=True)


class UserReportedDataForm(djangoforms.ModelForm):    
  class Meta:  
    model = UserReportedStatus
    exclude = ('status’ )

谢谢,

[EDIT#1]

我偶然发现了这篇文章(how to make dynamically generated forms with one to many relationships in django),并按照提交者在页面上打印表单时使用的方法

A]现在模型类中的表单

class UserCountryForm(djangoforms.ModelForm):
  class Meta:  
    model = UserReportedCountry

class UserCityForm(djangoforms.ModelForm):
  class Meta:  
    model = UserReportedCity
    exclude = ('country', )

class UserStatusForm(djangoforms.ModelForm):
  class Meta:  
    model = UserReportedStatus
    #hiding the site_is_up property
    exclude = ('site_is_up', 'city' )

B]打印这些表格的方法:

def print_user_reporting_form(self):
    self.response_variable.out.write('<div id="userDataForm">'
                                        '<form method="POST" '
                                              'action="/UserReporting">' 
                                           '<table>' )

    #method call to print the pre-populated user form with users country and city value
    self.response_variable.out.write (UserCountryForm())
    self.response_variable.out.write (UserCityForm())
    self.response_variable.out.write(UserStatusForm())

    self.response_variable.out.write (      '</table>'
                                            '<input type="submit" name="report_up" value= "Report Up">'
                                            '<input type="submit" name="report_down" value= "Report Down">'
                                        '</form>'
                                      '</div>')

谢谢,

1 个答案:

答案 0 :(得分:1)

您的表单输出正确。

城市和州之间存在一对多的关系。

                               country
          __ __ __ __ __ __ __ __ | __ __ __ __ __ __ __ 
         /               |               |              \ 
      city             city            city            city   
    __ _|_ __        __ _|_ __       __ _|_ __       __ _|_ __  
   |  |   |  |      |  |   |  |     |  |   |  |     |  |   |  |
   s  s   s  s      s  s   s  s     s  s   s  s     s  s   s  s     

您有一个表单,用于创建单个状态和城市之间的链接,您可以重复执行此操作以创建一个城市到多个状态的关系。

下拉列表询问您希望与您的状态关联的城市。

您明确排除了状态字段并记下this

  

请注意

     

目前已实施,设定   auto_now或auto_now_add为True将   导致该字段具有editable = False   和空白=真实设置。