Reputation: 3050
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
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