2014-11-05 2 views
0

Я работаю с Django 1.7, и у меня есть эти моделиSerialize Джанго QuerySet с иностранными значениями

class Producto(models.Model): 
    item = models.CharField(max_length=10) 
    descripcion = models.CharField(max_length=140) 
    unidad = models.CharField(max_length=5)  
    usuario = models.ForeignKey(User) 
    alta = models.DateTimeField(auto_now_add=True) 
    imagen = models.ImageField(upload_to='images/producto/',blank=True,null=True) 
    def __unicode__(self): 
     return self.item 

class OEntrada(models.Model): 
    folio = models.CharField(max_length=15) 
    codigo_proveedor = models.CharField(max_length=15) 
    nombre_proveedor = models.CharField(max_length=100) 
    status = models.IntegerField(default=0) 
    fecha = models.DateTimeField(auto_now_add=True) 
    def __unicode__(self): 
     return self.folio 

class OEntradaDetalle(models.Model): 
    oentrada = models.ForeignKey(OEntrada,related_name='detalles') 
    producto = models.ForeignKey(Producto) 
    cantidad_ordenada = models.DecimalField(default=0,decimal_places=2, max_digits=10) 
    cantidad_recibida = models.DecimalField(default=0,decimal_places=2, max_digits=10) 
    fecha_entrega = models.DateField(blank=True,null=True) 
    epc = models.CharField(max_length=25,null=True,blank=True) 

анг Я хочу сделать JSON с некоторыми конкретными данными с некоторыми фильтрами, принимая только те продукты, которые не являются в инвентаризации (я получил это) Я хочу, чтобы получить oentrada.folio, producto.item, cantidad_recibida и epc от OEntradaDetalle

Я попытался Аннотировать:

def producto_para_ingreso(request,folio_orden_entrada): 
    inventario = Inventario.objects.all().values('epc') 
    pendientes = OEntradaDetalle.objects.filter(oentrada__folio=folio_orden_entrada, 
     cantidad_recibida__gt=0).exclude(epc__in=inventario).annotate(item='producto__item') 
    response = serializers.serialize('json',pendientes) 
    return HttpResponse(response) 

также я пробовал значения: (это возвращает меня, чего я хочу, но в уродливой форме, как: {producto__item: u'ITEM1',cantidad_recibida:Decimal('100')})

pendientes = OEntradaDetalle.objects.filter(
oentrada__folio=folio_orden_entrada,cantidad_recibida__gt=0 
).exclude(epc__in=inventario).values(
'epc','producto__item','cantidad_recibida') 

На самом деле это то, что я сейчас: (JSON)

{ 
     "fields": { 
      "producto": 7, 
      "oentrada": 1, 
      "epc": "122C00000829", 
      "fecha_entrega": null, 
      "cantidad_ordenada": "1", 
      "cantidad_recibida": "1" 
     }, 
     "model": "inventario_rfid.oentradadetalle_deferred_cantidad_ordenada_fecha_entrega_oentrada_id", 
     "pk": 3 
    }, 

и мне нужно что-то вроде этого:

{ 
    "fields": { 
     "producto": "ITEM-1", <<I need a Foreign Value, not the ID 
     "oentrada": "E01", << Same in this, I need a Foreign Value not the Id 
     "epc": "122C00000829", 
     "fecha_entrega": null, 
     "cantidad_ordenada": "1", 
     "cantidad_recibida": "1" 
    }, 
    "model": "inventario_rfid.oentradadetalle_deferred_cantidad_ordenada_fecha_entrega_oentrada_id", 
    "pk": 3 
}, 

было бы Awsome, если я могу получить чистый JSON, исключающий fields, model and pk info.

Спасибо!

+0

Я думаю, что [это] (http://stackoverflow.com/questions/3753359/serializing-foreign-key-objects-in-django) аналогично вам, и если вы используете для спокойной цели, я предлагаю использовать Django Rest Framework. –

+0

Я видел это, но я использую Django 1.7, а wadofstuff.django.serializers.json больше не работает, также я пробовал natural_key, но мне не повезло –

+0

Я также использую Django Rest Framework, но как я могу это сделать с REST? –

ответ

0

Вы можете сделать это в serializers.py

class ProductoSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = Producto 


class OEntradaDetalleSerializer(serializers.ModelSerializer): 
    producto = ProductoSerializer(many=True) 

    class Meta: 
     model = OEntradaDetalle 
     fields = ('producto', epc', ....)# write the field which you needed 
+0

Я пробовал что-то вроде этого, но вот еще одна деталь ... где я могу поместить 3 фильтра-условия? Мне нужны продукты одного «oentrada__folio», которые имеют более 0 в поле 'cantidad_recibida' И что' epc' не зарегистрирован в Inventory ('filter (oentrada__folio = folio_orden_entrada, cantidad_recibida__gt = 0) .exclude (epc__in = inventario) '). Эти причины заставляют меня перейти на «более ручной» вариант, чем API –

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