I'm now having trouble doing stuff when it updates the record.

I tried extending the methods write and save, but none are doing anything.
if i use this when creating records:

class CustomParty(ModelSQL, ModelView):
    'Party'
    __name__ = 'party.party'

    @classmethod
        def create(cls, vlist):
            records = super(CustomParty, cls).create(vlist)

what should I use for when updating?
and when deleting?


Thanks


On Thursday, January 8, 2015 at 2:36:54 PM UTC-3, Mariano Ramon wrote:
>
> Oh Yeah! I did that before and don't know why I changed it! Thanks so much 
> for taking the time to go through my code. It worked
>
> Mariano.
>
>
> On Thursday, January 8, 2015 12:52:52 PM UTC-3, jmartin wrote:
>>
>>
>>
>> 2015-01-08 15:10 GMT+01:00 Mariano Ramon <[email protected]>:
>>
>>>
>>>
>>> Ok this got a bit long so I summarize and I added the corrections that 
>>> were made along the way:
>>>
>>>
>>> 1) I have two classes Party and Patient
>>>
>>> 2) The only constraint to create a Patient is to have a related Party
>>>
>>> 3)I need to create a Patient when a Party is created and set the 
>>> relation between the two 
>>>
>>> (Actually when updating and deleting too and it has to work both ways 
>>> but I'm focusing just on this for now)
>>>
>>>
>>>
>>> here are the two classes:
>>>
>>> class Patient(ModelSQL, ModelView):
>>>     __name__ = 'gnuhealth.patient'
>>>
>>>
>>>     name = fields.Many2One(
>>>         'party.party', 'Patient', required=True,
>>>         domain=[
>>>             ('is_patient', '=', True),
>>>             ('is_person', '=', True),
>>>             ],
>>>         states={'readonly': Bool(Eval('name'))},
>>>         help="Person associated to this patient")
>>>
>>>
>>>
>>>
>>>
>>>
>>> class Party(ModelSQL, ModelView):
>>>     'Party'
>>>     __name__ = 'party.party'
>>>
>>>
>>>     @classmethod
>>>     def create(cls, vlist):
>>>         records = super(Party, cls).create(vlist)
>>>         pool = Pool()
>>>         Patient = pool.get('gnuhealth.patient')
>>>         patient = Patient()
>>>         patient.name = records
>>>
>>
>> You are assigning a list of instances of parties to M2O record instead of 
>> a party instance. Try to select the first one.
>>  
>>
>>>         patient.save()
>>>         
>>>         return records
>>>
>>>
>>> when I try to create a party I get:
>>>
>>> Traceback (most recent call last):
>>>   File 
>>> "/gnuhealth/tryton/server/trytond-3.2.4/trytond/protocols/dispatcher.py", 
>>> line 158, in dispatch
>>>     result = rpc.result(meth(*c_args, **c_kwargs))
>>>   File 
>>> "/gnuhealth/tryton/server/trytond-3.2.4/trytond/modules/custom/custom.py", 
>>> line 283, in create
>>>     patient.name = records
>>>   File "/gnuhealth/tryton/server/trytond-3.2.4/trytond/model/model.py", 
>>> line 445, in __setattr__
>>>     super(Model, self).__setattr__(name, value)
>>>   File 
>>> "/gnuhealth/tryton/server/trytond-3.2.4/trytond/model/fields/many2one.py", 
>>> line 80, in __set__
>>>     assert isinstance(value, (Target, NoneType))
>>> AssertionError
>>>
>>>
>>>
>>> a representation of "records" which would be "value" in the last line of 
>>> the stack trace gives me:
>>>
>>> [Pool().get('party.party')(17809)]
>>>
>>>
>>> other thing I tried is not saving Patient and appending it to records:
>>>
>>>     @classmethod
>>>     def create(cls, vlist):
>>>         records = super(CustomParty, cls).create(vlist)
>>>         pool = Pool()
>>>         Patient = pool.get('gnuhealth.patient')
>>>         patient = Patient()
>>>         records.append(patient)
>>>
>>>         return records
>>>
>>>
>>> which gives me:
>>>
>>> Traceback (most recent call last):
>>>   File 
>>> "gnuhealth/tryton/server/trytond-3.2.4/trytond/protocols/dispatcher.py", 
>>> line 158, in dispatch
>>>     result = rpc.result(meth(*c_args, **c_kwargs))
>>>   File 
>>> "gnuhealth/tryton/server/trytond-3.2.4/trytond/model/modelstorage.py", line 
>>> 51, in <lambda>
>>>     result=lambda r: map(int, r)),
>>>   File "gnuhealth/tryton/server/trytond-3.2.4/trytond/model/model.py", 
>>> line 456, in __int__
>>>     return int(self.id)
>>> TypeError: int() argument must be a string or a number, not 'NoneType'
>>>
>>>
>>>
>>> Regards
>>> Mariano
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>  
>>>
>>
>>
>>
>> -- 
>>
>> Jesús Martín
>>
>> Zikzakmedia SL
>> C/ de Sant Jaume, 9, baixos, 2ª
>> 08720 Vilafranca del Penedès
>> ☏ 93 890 21 08
>>  
>

Reply via email to