2016-03-28 9 views
0

Bir API oluşturmak için Django REST çerçevesini kullanıyorum. Seri hale getirilmiş çıktıya birden fazla modelden veri eklemek istiyorum. Şu andaDjango serializer tarafından döndürülen model verilerine ek veri ekleme

benim serialiser şöyle görünür:

class ItemSerializer(serializers.HyperlinkedModelSerializer): 
 
    class Meta: 
 
     model = Item 
 
     fields = ('url', 'owner', 'item_type')

Bir

item_cost

değer fr eklemek istiyorum Benim Costs modelim serileştirilmiş çıktıya (Item modelindeki her bir öğe için farklı bir maliyet). Ayrıca serileştirilmiş çıktıya bir unix zaman damgası değeri eklemek istiyorum (diğer serileştirilmiş çıktının sonuna yerleştirilecek bir değer). aşağıdaki gibi

Benim serialiser bir görünümde kullanılır: Ben tefrika çıkışına diğer veri öğeleri eklemek nasıl çalışamaz

class ItemViewSet(viewsets.ModelViewSet): 
 
    queryset = Item.objects.all().order_by('-date_added') 
 
    serializer_class = ItemSerializer

.

cevap

2

Sen rest_framework.serializers bir SerializerMethodField kullanabilir ve aradığınız değer döndüren yöntemi, örneğin oluşturabilirsiniz: docs

class ItemSerializer(serializers.HyperlinkedModelSerializer): 
    cost = serializers.SerializerMethodField() 

    def get_cost(self, obj): 
     value = ... # calculate your value 
     return value 

    class Meta: 
     model = Item 
     fields = ('url', 'owner', 'item_type', 'cost') 

Referans: http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

+0

mükemmel Gustavo olduğunu! Sorguya bağlı bir eylemi yapabilmek için get_cost işlevinde arama url'sinden sorgu param'larına erişmenin bir yolu var mı? –

+1

Evet yapabilirsin. Yöntemin içinden, 'QueryDict': 'self.context.get ('request') 'a ulaşabilirsiniz. Query_params' –

+1

Mükemmel teşekkürler! –