2016-04-01 15 views
0

Yani bu benim denetleyicisi kodu: başarıyla gönderdiğinizdeSQLFORM fabrikasında, neden okunduğum onay kutusunun işareti kaldırılmıyor?

form = SQLFORM.factory(Field("something_readonly", writable=False, default="can't change") 
         ,Field("something", requires=IS_LENGTH(10,5)) 
         ,Field("some_flag", "boolean", writable=False, default=True)) 
if form.process().accepted: 
    print("validate") 

return dict(form=form) 

, her şey beklediğim nasıl görünür; yani "bir şey" alanı boş ve salt okunur alanlar değerlerini korur.

Ancak, doğrulama başarısız olursa ("herhangi bir şey olmadan" gönderirken olduğu gibi), "" some_flag "onay kutusu işaretlenmemişse. Diğer salt okunur alan, "bir şey_başka", değerini korur.

Hata, değil mi? Bunu nasıl aşabilirim? Görünümünde javascript alanındaki alanı devre dışı bırakabilirim, ancak mümkünse denetleyicide yapılabilecek bir çözüm veya geçici çözüm istiyorum.

cevap

1

Evet, kesinlikle bir hata. Doğrulama başarısız sonra Geçici bir çözüm olarak, sen True için input widget checked niteliğini ayarlayabilirsiniz:

def fix_booleans(form): 
    for fieldname in form.fields: 
     field = form.table[fieldname] 
     if field.type == 'boolean' and field.writable == False and field.default == True: 
      form.custom.widget[fieldname]['_checked'] = True 

form.process(onvalidation=dict(onfailure=fix_booleans)) 
+0

Yani yararlı! Çok teşekkürler. – TheGerm

İlgili konular