Как отобразить название продукта в форме

#google-app-engine #referenceproperty

#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 '})
  

Результат

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

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

Мой вопрос: как отобразить product_name_jp вместо «myapp.models.Объект продукта в xxx»

Спасибо

Комментарии:

1. Как ModelField определяется?

2. Я использую Kay Framework и понятия не имею, что такое ModelField. Не могли бы вы посмотреть kay-docs. shehas.net/1.0.0 /… для ModelFielf

Ответ №1:

Цитата из документов, в разделе class kay.utils.forms.Поле модели:

Если класс модели имеет __unicode__() метод, возвращаемое значение этого метода будет использоваться для отображения текста в теге опции. Если нет никакого __unicode__() метода, Model.__repr__() будет использоваться для этой цели.

Вы можете переопределить это поведение, передав имя атрибута, используемого для значения тега option, с аргументом ключевого слова 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')
  

Комментарии:

1. f_product = формы. Поле модели (model=Product, default= None, label=»Название продукта», option_name=’product_name_jp’) является правильным. Большое спасибо