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
        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







 

Reply via email to