如何在表单中显示产品名称

时间:2014-06-20 08:15:36

标签: google-app-engine referenceproperty

model.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 '})

Resuls是

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

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

我的问题:如何在xxx处显示product_name_jp而不是“myapp.models.Product对象”

由于

1 个答案:

答案 0 :(得分:1)

类kay.utils.forms.ModelField 下的the docs引用:

  

如果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在评论中提到的那样,这是有效的

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