मेरे पास एक साइट पर एक संपर्क फ़ॉर्म है जो CreateAPIView
पर एक मॉडल का एक नया उदाहरण बनाने के लिए पोस्ट कर रहा है (जिसे अंत में व्यवस्थापक को ईमेल किया गया है) । मेरे धारावाहिक पर मेरे पास स्पैम को अस्वीकार करने में मदद करने के लिए एक हनीपॉट फ़ील्ड है।डीआरएफ: सत्यापन के बाद मॉडल सीरिएलाइज़र पर फ़ील्ड निकालें लेकिन सृजन से पहले (CreateAPIView पर)
मॉडल:
class Message(models.Model):
name = ...
message = ...
और serializer:
class MessageSerializer(serializers.ModelSerializer):
# Honeypot field
url = serializers.CharField(allow_blank=True, required=False)
class Meta:
model = Message
fields = '__all__'
def validate_url(self, value):
if value and len(value) > 0:
raise serializers.ValidationError('Spam')
return value
और दृश्य:
class MessageView(generics.CreateAPIView):
''' Create a new contact form message. '''
serializer_class = MessageSerializer
मेरे समस्या यह है कि यह खड़ा के रूप में, जब मैं इस दृश्य के लिए पोस्ट, मैं त्रुटि प्राप्त करें:
TypeError: Got a
TypeError
when callingMessage.objects.create()
. This may be because you have a writable field on the serializer class that is not a valid argument toMessage.objects.create()
. You may need to make the field read-only, or override the MessageSerializer.create() method to handle this correctly.
इतनी स्पष्ट रूप से seriazlier CreateApiView.perform_create()
मैं serializer क्षेत्र के लिए read_only
जोड़ने का प्रयास में मॉडल के लिए url
क्षेत्र को बचाने के लिए प्रयास कर रहा है, लेकिन इसका मतलब है कि url_validate
विधि पूरी तरह छोड़ दिया है।
प्रमाणीकरण होने तक मैं धारावाहिक पर फ़ील्ड कैसे रख सकता हूं, serializer.save()
से पहले इसे हटाकर perform_create()
में कहा जाता है?
हा, मैं इसे समझ से बाहर है और वास्तव में तैनात के रूप में आप से किया था। आपके पास अंक हो सकते हैं;) –
आपकी प्रतिक्रिया के लिए धन्यवाद लेकिन 'Message.objects.create (** डेटा) 'गलत है, आपको' validated_data' पास करना चाहिए, मेरा मतलब है' Message.objects.create (** validated_data) ' – shotgunner