Friday, June 29, 2018

Re: Newbie : Object copy - weird error :-)

Hello  Julio,

Ok, I see.

I try to create a way to archive (copy) the same object instance on an other DataBase.

I followed this advice : # https://stackoverflow.com/questions/21699707/python-how-to-copy-all-attibutes-from-base-class-to-derived-one


2018-06-27 14:56 GMT+02:00 Julio Biason <julio.biason@azion.com>:
Hi Mikael,

The problem is happening because of this: __init__() takes from 1 to 2 positional arguments but 11 were given

On your new __init__(), you added just 2 parameters: `self` and `source`. But you overwrote the default `models.Model` init, which receives way more parameters (the original signature for this function is `__init__(self, *args, **kwargs)`).

What are you actually trying to achieve with this?

On Tue, Jun 26, 2018 at 1:17 PM, <mickael.barbo@gmail.com> wrote:
Hi all :-)

I'd like to archive some data.

I did that :

class AbstractDataModel(models.Model):

xxx


class Meta:
       
abstract = True


def __iter__(self):

       
return iter([self.xxx, self.yyy, self.zzz, self.aaa,
           
self.qqq, self.mode_bbb])


class DataModel(AbstractDataModel):


pass


class DataModelArchive(AbstractDataModel):
   
# https://stackoverflow.com/questions/21699707/python-how-to-copy-all-attibutes-from-base-class-to-derived-one
   
def __init__(self, source=None):
       
if source is not None:
           
self.__dict__.update(source.__dict__)



But when I want to access data in DataModelArchive, like DataModelArchive.objects.all() for example,
I get


Traceback (most recent call last):
 
File "/home/.../tests.py", line 1090, in test_archive
   
print(DataModelArchive.objects.all())
 
File "/home/.../venv/lib/python3.6/site-packages/django/db/models/query.py", line 248, in __repr__
    data
= list(self[:REPR_OUTPUT_SIZE + 1])
 
File "/home/.../venv/lib/python3.6/site-packages/django/db/models/query.py", line 272, in __iter__
   
self._fetch_all()
 
File "/home/.../venv/lib/python3.6/site-packages/django/db/models/query.py", line 1179, in _fetch_all
   
self._result_cache = list(self._iterable_class(self))
 
File "/home/.../venv/lib/python3.6/site-packages/django/db/models/query.py", line 63, in __iter__
    obj
= model_cls.from_db(db, init_list, row[model_fields_start:model_fields_end])
 
File "/home/.../lib/python3.6/site-packages/django/db/models/base.py", line 507, in from_db
   
new = cls(*values)
TypeError: __init__() takes from 1 to 2 positional arguments but 11 were given



What am I doing wrong ?

Thx
;-)

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/ac3a7a8f-f878-48b3-943a-eb47f6b03e7e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Julio Biason, Sofware Engineer
AZION  |  Deliver. Accelerate. Protect.
Office: +55 51 3083 8101  |  Mobile: +55 51 99907 0554

--
You received this message because you are subscribed to a topic in the Google Groups "Django users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/django-users/gHKY0BAcTi4/unsubscribe.
To unsubscribe from this group and all its topics, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAEM7gE2y%3DQHEJdbwUMbhmxDnY8%2BEHSVdUKUJtgbGTX2UgoWKSA%40mail.gmail.com.

For more options, visit https://groups.google.com/d/optout.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAPLHwtwGKQm_%3DMaft4vNnFQjf00Cmyw8UkLdq6W_aAmi5KVNgQ%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment