I think your problem is corrupted data. You have "Pippo Pippo" in a field 
that is either integer or reference. This can happen with sqlite if you 
change a field type. Delete the database and start again. I do not think 
there is anything wrong with your code.

On Sunday, 27 January 2013 15:51:33 UTC-6, Ivan Gazzola wrote:
>
> Il giorno giovedì 24 gennaio 2013 18:56:59 UTC+1, Massimo Di Pierro ha 
> scritto:
>
>>
>> db.Relation.name.widget=SQLFORM.widgets.autocomplete(request,db.Person,id_field=
>> db.Person.id <http://db.person.id/>)
>>
>> db.Relation.contact.widget=SQLFORM.widgetsre.autocomplete(request,db.Person,id_field=
>> db.Person.id <http://db.person.id/>)
>>
>> should be
>>
>>
>> db.Relation.name.widget=SQLFORM.widgets.autocomplete(request,db.Person,name,id_field=
>> db.Person.id <http://db.person.id/>)
>> db.Relation.contact.widget=SQLFORM.widgets.autocomplete(request,
>> db.Person.name,id_field=db.Person.id <http://db.person.id/>)
>>
>>
>
>
> I forgot to write "name" in previus post  but the model was ok. Really my 
> model is more complex:
>
> db.define_table('Nominativi',
>     Field('nome',notnull=True, represent=lambda nome:nome.title()),
>     Field('categoria',db.Categorie_Nominativi,default='1'),
>     Field('sesso',requires=IS_NULL_OR(IS_IN_SET(['maschio','femmina']))),
>     Field('mail',requires=IS_NULL_OR(IS_EMAIL(error_message=T('Inserire 
> Una Mail Valida')))),
>     Field('indirizzo'),
>     Field('localita', label='Località'),
>     Field('cap',requires=IS_NULL_OR(IS_LENGTH(5,5, 
> error_message=T('Inserire Un CAP valido')))),
>     Field('provincia',requires=IS_NULL_OR(IS_IN_SET(Elenco_Province, 
> zero=T('Selezionare una Provincia')))),
>     Field('codice_fiscale',length=20),
>     Field('partita_iva',length=20),
>     Field('data_di_nascita','date'),
>     Field('professione'),
>     Field('padre'),
>     Field('madre'),
>     Field('inviato_da'),
>     Field('id_precendente','integer'),
>     format=lambda 
> r:r.nome.title()+'-->'+db.Categorie_Nominativi(r.categoria)['categoria'])
>
>
>
> db.Nominativi.categoria.requires=IS_IN_DB(db,'Categorie_Nominativi.id','%(categoria)s',zero=None)
> db.Nominativi.categoria.represent = lambda id,row: row.categoria
> db.Nominativi.nome.represent = lambda nome,row: nome.title()
>
> db.Nominativi.inviato_da.widget=SQLFORM.widgets.autocomplete(request,db.Nominativi.nome)
>
>
> db.define_table('Relazioni',
>     Field('nominativo',db.Nomiantivi,required=True),
>     Field('referente',db.Nominativi,required=True))
>
> db.Relazioni.nominativo.widget=SQLFORM.widgets.autocomplete(request,db.Nominativi.nome,id_field=
> db.Nominativi.id)
>
> db.Relazioni.referente.widget=SQLFORM.widgets.autocomplete(request,db.Nominativi.nome,id_field=
> db.Nominativi.id)
>
> The error log:
> <type 'exceptions.ValueError'> invalid literal for int() with base 10: 
> 'Pippo Pippo'
> and 'pippo pippo' was the value of 'referente'.
>
> If i try a simplified model like that i posted before, i can insert the 
> new record but the 'contact' value is stored in 'name' field and 'contact' 
> field is always '0'.
>
> db.define_table('Person', Field('name'), format='%(name)s')
> db.define_table('Relation', Field('name',db.Person), ('contact',db.Person))
> db.Relation.name.widget=SQLFORM.widgets.autocomplete(request,
> db.Person.name,id_field=db.Person.id <http://db.person.id/>)
> db.Relation.contact.widget=SQLFORM.widgets.autocomplete(request,
> db.Person.name,id_field=db.Person.id <http://db.person.id/>)
>
> I suppose that ajax request lose some data, it would store only the last 
> call to table Person ...
>

-- 



Reply via email to