2015-06-01 2 views
1

У меня есть 2 модели, одна - это заголовок заказа, а другая - детали Orden Я хочу получить JSON, у которого есть заголовок заказа, и его детали внутри. Я видел функцию «model__set», которая извлекает все связанные с ним внешние данные, но я понятия не имею, как создать JSON, подобную структуре выше.Django - ModelSerializer с model_set

Мой 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(...) 

мне нужно получить что-то вроде:

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

Как я могу написать сериалайзер или запрос, что json.dumps этого?

ответ

1

взгляните на использование natural keys. Вы можете определить ваш OrderHeader как:

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

    def natural_key(self): 
     return self.order_doc 

и в вашем QuerySet, вы можете сделать что-то вроде этого:

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

Более подробно в документации

+0

но с natural_key я могу получить ТОЛЬКО значения, указанные в 'def natural_key (self):' в одном поле (в этом случае поле 'header' правильно? Мне нужно получить все поля заголовка и все подробные поля, а также сделать все данные заголовка массивом внутри заголовка. –

+0

ответ, который вы дали, вернет что-то Например: [{header: '1234', var1: 'var1', var2: 'var2'}, {header: '1234', var1: 'var1', var02: 'var02'}, ...]. Я не прав? –

+0

Фактически я не тестировал его полностью. Позвольте мне вернуться к вам, посмотрев на нее – Abhishek

Смежные вопросы