Как вставить десериализованный объект django? - PullRequest
3 голосов
/ 18 августа 2011

Я хотел бы импортировать на моем сервере django 'A' некоторые объекты с другого сервера django 'B'.

Для этого на сервере 'B' я делаю: python manage.py dumpdata -format = xml

Затем я получаю нужную часть xml, и на сервере 'A' я пытаюсь десериализовать один объект: Вот что я сделал в оболочке python:

data="""<object pk="69" model="inventory.cinodeserver">
        <field type="CharField" name="server_name">rfrsmh81</field>
        <field type="CharField" name="server_type">Sun Fire V440</field>
        <field type="CharField" name="server_serial">0449AL2A3A</field>
        <field type="CharField" name="server_os">SunOS 5.8 HW 2/04</field>
        <field type="CharField" name="server_fw">4.18.10</field>
    </object>
"""
l=list(serializers.deserialize("xml", data))
o=l[0]
print o

<DeserializedObject: inventory.CINodeServer(pk=69)>

Проблема в том, что у меня уже есть другой объект с pk = 69, я просто хочу вставить импортированный объект в конец таблицы Mysql.

Итак, я попробовал это:

o.object.pk=None
o.save()

И я получил:

IntegrityError: (1048, "Column 'cinodecompany_ptr_id' cannot be null")

Note, the model is :

class CINodeServer(CINodeCompany):
    class Meta: 
        app_label = 'inventory'

    server_name = models.CharField(max_length=64,blank=True)
    server_type = models.CharField(max_length=64,blank=True)
    server_serial = models.CharField(max_length=64,blank=True)
    server_os = models.CharField(max_length=30,blank=True)
    server_fw = models.CharField(max_length=20,blank=True)

Так, как я могу добавить импортированный объект в конец моей таблицы SQL?

1 Ответ

0 голосов
/ 23 сентября 2014

В вашей модели отсутствует атрибут cinodecompany_ptr_id, указанный в ошибке:

IntegrityError: (1048, "Столбец 'cinodecompany_ptr_id' не может быть нулевым")

Взгляните на таблицу базы данных вашей модели, чтобы увидеть определение этого столбца.

Отправленный вами код модели не является полным. Он наследуется от CINodeCompany, которую вы не включили. Это недостающее поле, вероятно, определено в этом родительском классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...