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对象”
由于
答案 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')