1

都市が地域に属する地域と都市のモデル定義を取得したユースケース「都市の追加」を有効にしようとしています:

class Region(db.Model):
  name = db.StringProperty()
  vieworder = db.IntegerProperty()
  image = db.BlobProperty()

class City(db.Model):
  region = db.ReferenceProperty()
  name = db.StringProperty()
  image = db.BlobProperty()
  vieworder = db.IntegerProperty()
  areacode = db.IntegerProperty()

次に、地域を手動で追加し、都市を追加するフォームを作成しました。

class AddCityForm(Form):

    my_choices = [
        ('0', _('All regions')),
        ('1', _('Delhi')),
    ]
    region = SelectField(choices=my_choices)
    name = TextField(_('Name'))

class AddCityHandler(BaseRequestHandler):

    def get(self):
        logging.info('i baserequesthandler')
        self.render('addcity.html', {'form': AddCityForm()})

ここで、選択肢をデータ レイヤーから読み取り、すべての地域のようRegion.all()に、ID をエンティティの ID にして、地域のキーを都市に入力し、それが属する地域を参照できるようにします。WTForms でデータストアのオプションに自分のリージョンを設定する方法を教えてください。

ありがとうございました

アップデート

GAE では、次のコードはオプションをデータストアから読み取るように機能します。

class RegionField(SelectField):

    def __init__(self, *args, **kwargs):
        super(RegionField, self).__init__(*args, **kwargs)
        self.choices = []
        for region in Region.all().fetch(99999):
        self.choices.append([region.key().id(), region.name])

class AddCityForm(Form):
    region = RegionField()
    name = TextField(_('Name'))
4

1 に答える 1

4

SelectField をサブクラス化できます。

class RegionField(SelectField):

    def __init__(self, *args, **kwargs):
        super(RegionField, self).__init__(*args, **kwargs)
        # a sample sqlalchemy query that returns a list of tuples (id, name)
        self.choices = models.Session.query(models.Region.id, models.Region.name).order_by(models.Region.name).all()

class AddCityForm(Form):
    region = RegionField()
    name = TextField(_('Name'))

永続化レイヤーの動作方法によっては、送信されたデータを ORM が理解できるものに強制するために実装する必要がある場合があることに注意してくださいpopulate_obj(self, obj, name)(これは、SelectMultipleField で必要になる可能性が高くなります)。

于 2012-04-29T02:58:42.807 に答える