2015-06-04 9 views
7

geçerek ModelSerializer'da geçersiz kıl() geçersiz kılma Ekstra bir parametre ile uğraşmak için Django Rest Framework'deki ModelSerializer diziselleştiricisinin varsayılan .create() yöntemini doğru bir şekilde ovverride buluyorum.Django dayanak çerçevesi: ek bir parametre

Özgün Django modelimde, extra parametresini yönetmek için varsayılan .save() yöntemini geçersiz kıldım. Şimdi .save() da şu şekilde çağrılabilir: .save(extra = 'foo').

O orijinal Django modelinde bir ModelSerializer eşleme oluşturmak zorunda:

from OriginalModels.models import OriginalModel 
from rest_framework import serializers 

class OriginalModelSerializer(serializers.ModelSerializer): 

    # model fields 
    class Meta: 
     model = OriginalModel 

Ama bu şekilde ben modeli .save() yönteme extra param geçemez.

Bu extra parametresini hesaba katarak (eninde sonunda) OriginalModelSerializer sınıfımın .create() yöntemini düzgün bir şekilde nasıl geçersiz kılabilirim?

cevap

12

Hmm. Bu "ekstra" kelimesini nasıl geçmek istediğinizi bilmediğim için bu mükemmel bir cevap olmayabilir (ör. normalde bir formda fazladan bir alan mıdır?)

Büyük ihtimalle ne yapmak istersin? sadece serializer üzerinde bir alan olarak foo temsil eder. Sonra (create yılında, o zaman create yapabilirsiniz Muhtemelen olsa yapar başka şeyler bazıları için yaratmak varsayılan uygulanmasına bakmak isterdim aşağıdaki

def create(self, validated_data): 
    obj = OriginalModel.objects.create(**validated_data) 
    obj.save(foo=validated_data['foo']) 
    return obj 

böyle bir şey yapmak validated_data bulunacaktır çoktan çoğa ilişkileri kaldırmak gibi).

+2

Sorun, "ekstra" paramın OrginalModel'imin bir alanı olmamasıdır. Bildiğim kadarıyla, "OrginalModel" – floatingpurr

+6

'un herhangi bir düzenli alanına eşlenmezse, bir 'ModelSerializer' alanına bir alan eklemenin bir yolu yoktur. Bunu yapmadan önce 'foo' alanını 'validated_data' dan çıkarmanız gerekir. model kurucuya, o zaman bu cevap çalışmalıdır. –