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