Джанго, получи полностью сериализованный объект. Все свойства от многих до многих отношений - PullRequest
2 голосов
/ 05 мая 2010

Я ищу способ сериализации всего объекта со всеми его связями. Кажется, теперь я могу получить только первичный ключ от сериализатора.

Это моя модель:

class Action(models.Model):
    name = models.CharField('Action Name', max_length=250, unique=True)
    message = models.TextField('Message', blank=True, null=True)
    subject = models.CharField('Subject', max_length=40, null=True)
    recipient = models.ManyToManyField('Recipient', blank=True, null=True)

    def __str__(self):
            return unicode(self.name).encode('utf-8')

    def __unicode__(self):
            return unicode(self.name)

class Recipient(models.Model):
    address = models.EmailField('Address', max_length=75, unique=True)
    businessHours = models.BooleanField('Business Hours Only', default=False)

    def __str__(self):
            return unicode(self.address).encode('utf-8')

    def __unicode__(self):
            return unicode(self.address)

Я запускаю сериализатор здесь:

all = serializers.serialize('xml', list(Action.objects.select_related().all()))

если я запускаю print all, я получаю список выводов только первичный ключ для поля получателя.

<field type="CharField" name="subject">On The Road Productions</field>
<field to="sla.recipient" name="recipient" rel="ManyToManyRel">
<object pk="29"></object>
</field></object>
<object pk="11" model="sla.action">
<field type="CharField" name="name">On The Road Productions</field>
<field type="TextField" name="message">

Мне также нужны все свойства для связанных Получателей. Любая идея, как я могу получить это?

edit - я нашел этот кусок в

Я нашел этот фрагмент в xml_serializer.py, но я не уверен, как его изменить.

def handle_m2m_field(self, obj, field):
    """
    Called to handle a ManyToManyField. Related objects are only
    serialized as references to the object's PK (i.e. the related *data*
    is not dumped, just the relation).
    """
    if field.creates_table:
        self._start_relational_field(field)
        for relobj in getattr(obj, field.name).iterator():
            self.xml.addQuickElement("object", attrs={"pk" :  smart_unicode(relobj._get_pk_val())})
        self.xml.endElement("field")

1 Ответ

0 голосов
/ 05 ноября 2010

предлагает взглянуть на внутренности Джанго-поршня.

с django-pneon это не проблема, и код довольно читабелен так что погрузитесь.

...