request.data
aracılığıyla ayarlanmamış alanların değerlerini ayarlamak için bir serileştiriciye ek args
/kwargs
sağlamak için Django REST Framework'de oldukça standart bir görevdir, ancak URL parametreleri veya çerezlerdeki değer aracılığıyla. Örneğin, POST isteği üzerine request.user
'a eşit olan Yorum modelimin user
alanını ayarlamam gerekiyor. Bu ek argümanlara bağlam denir. StackOverflow'dakiDjango REST Framework: serializer içeriğinin nasıl çalışır?
Çeşitli sorular (1, 2) Benim ModelViewSet
ait get_serializer_context()
yöntemini geçersiz olduğunu göstermektedir. Yaptım ve yardım etmiyor. Neyin yanlış olduğunu anlamaya çalıştım ve kaynak koddan anlamamadığımı, bu bağlam sisteminin genel olarak nasıl çalışması gerektiğini öğrendim. (bu konudaki belgeler de eksiktir)
Diziselleştiricinin normal istek verilerine bağlam eklediği yerlerde herhangi biri açıklanabilir mi? Değerleri bağlamdan kaydettiği iki yer buldum.
- serializer.save(), onaylanmış veri kwargs karışımları yöntem olup, ancak genelde (örneğin ModelMixins) tarafından herhangi bir bağımsız değişken olarak adlandırılır. fields.
__new__()
, hangi önbellekler ve kwargs önbellekleri, ama kimse daha sonra onları okur gibi görünüyor. Eğer jenerik görüş ve viewsets her kullandığınızda
O kadar çok düşündüm, ama sonra ne olacak? Serializer'ın alanlardan aldığı değerleri alanlarla doldurmak için bu bağlamı kullandığı yeri göremiyorum. –
Normal durumlarda, içerik bir serileştirici tarafından kullanılmayacaktır. Diziselleştiricide 'request' nesnesine erişmek istiyorsak,' self.context.get ('request') 'ifadesini kullanacağız. Ayrıca, herhangi bir serileştirici alanın 'to_representation' yönteminde' self.context' değişkenini kullanarak 'context' öğesine erişebiliriz. –
([docs] 'dan (http://www.django-rest-framework.org/api-guide/serializers/#including-extra-context) "Bağlamı dahil etmenin ortak bir örneği" Köprüsüz ilişkileri içeren seri hale getirici, diziselleştiricinin geçerli talebe erişmesini ve böylelikle tam olarak kaliteli URL'ler oluşturabilmesini gerektirir. –