【问题标题】:How to display product name in form如何在表格中显示产品名称
【发布时间】:2014-06-20 08:15:35
【问题描述】:

模型.py

class Product(db.Model):
    product_name_jp = db.StringProperty(required=True)
    product_code = db.StringProperty(required=True)

class ProductPrice(db.Model):
    product = db.ReferenceProperty(Product,
                                   collection_name='price_collection')
    quantity = db.IntegerProperty()
    price = db.IntegerProperty()

forms.py

class ProductPriceForm(forms.Form):
    f_product = forms.ModelField(model=Product, default=None, label="Product Name")
    f_quantity = forms.TextField("Quantity ", required=True)
    f_price = forms.TextField("Price ", required=True)

views.py

def addproductprice(request):
    productprice_form = ProductPriceForm()



    if request.method =="POST" and productprice_form.validate(request.form):

        productprice_form.save()

    return render_to_response('myapp/message.html',{'form':productprice_form.as_widget(), 'message':'Insert Produce Price xxx '})

结果是

https://dl.dropboxusercontent.com/u/27576887/StackOverFlow/2.JPG

https://dl.dropboxusercontent.com/u/27576887/StackOverFlow/3.jpg

我的问题:如何显示 product_name_jp 而不是“myapp.models.Product object at xxx”

谢谢

【问题讨论】:

  • ModelField 是如何定义的?
  • 我正在使用 Kay 框架,但我不知道什么是 ModelField。能否请您查看kay-docs.shehas.net/1.0.0/… ModelFielf

标签: google-app-engine referenceproperty


【解决方案1】:

引用the docs,在class kay.utils.forms.ModelField下:

如果Model类有__unicode__()方法,这个的返回值 方法将用于呈现选项标签中的文本。如果 没有__unicode__() 方法,Model.__repr__() 将用于 这个目的。

您可以通过传递属性来覆盖此行为 用于带有 option_name 关键字参数的选项标记值的名称 关于这个字段的初始化。

这告诉我们您需要在此行中设置 option_name 关键字

f_product = forms.ModelField(model=Product, default=None, label="Product Name")

它没有很好地记录,所以我不能告诉你具体怎么做,可能是以下之一

f_product = forms.ModelField(model=Product, default=None, label="Product Name", option_name=Product.product_name_jp)

f_product = forms.ModelField(model=Product, default=None, label="Product Name", option_name='product_name_jp')

f_product = forms.ModelField(model=Product, default=None, label="Product Name", option_name=Product._properties['product_name_jp'])

也许不是我建议的那些,我不确定,但你可能会通过尝试几个来发现。


编辑:

正如 John 在 cmets 中提到的,这是一个有效的方法

f_product = forms.ModelField(model=Product, default=None, label="Product Name", option_name='product_name_jp')

【讨论】:

  • f_product = forms.ModelField(model=Product, default=None, label="Product Name", option_name='product_name_jp') 是正确的。非常感谢
猜你喜欢
  • 2021-01-02
  • 1970-01-01
  • 2019-06-18
  • 2022-09-26
  • 2018-12-05
  • 1970-01-01
  • 2019-08-09
  • 2015-07-25
  • 2015-02-25
相关资源
最近更新 更多