Alex Lord Mordor
Alex Lord Mordor

Reputation: 3050

Django - ModelSerializer with model_set

I have 2 Models, one is an Order Header, and the other is the Orden detail(s) I want to retrieve a JSON that has the Order Header and it's details inside. I have seen the "model__set" function that retrieves all header's related foreign details, but I have no idea how to make a JSON like above structure.

My models.py

class OrderHeader(models.Model):
    order_doc = models.CharField(...)
    client = models.CharField(...)
    ...

class OrderDetail(models.Model):
    header = models.ForeignKey(OrderHeader)
    var1 = models.CharField(...)
    var2 = models.CharField(...)

I need to receive something like:

[
    {
    order_doc:'1234',
    client:'Client Name',
    details:[
        {
            var1:'var1',
            var2:'var2'
        },
        {
            var1:'var01',
            var2:'var02'
        }
    ]
    },
    ...
]

How can I write a serializer or a query that json.dumps this?

Upvotes: 1

Views: 288

Answers (1)

Abhishek
Abhishek

Reputation: 3068

take a look at using natural keys. You can define your OrderHeader as:

class OrderHeader(models.Model):
    order_doc = models.CharField(...)
    client = models.CharField(...)

    def natural_key(self):
        return self.order_doc

and in your queryset, you can do something like this:

result = serializers.serialize("json", OrderDetail.objects.filter(header__id = pk), indent=2, use_natural_foreign_keys=True, use_natural_primary_keys=True)

More details in the documentation

Upvotes: 1

Related Questions