0

模型.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()

表格.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)

视图.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”

谢谢

4

1 回答 1

1

引用文档,在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'])

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


编辑:

正如约翰在评论中提到的那样,这是一个有效的

f_product = forms.ModelField(model=Product, default=None, label="Product Name", option_name='product_name_jp')
于 2014-06-20T09:20:56.910 回答