#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’) является правильным. Большое спасибо