2015-10-07 13 views
6

serializing यह मेरा आदर्श है:DjangoRestFramework - अशक्त क्षेत्रों को छोड़ दें जब वस्तुओं

class Post(models.Model): 
    user = models.ForeignKey(User) 
    post = models.CharField(max_length=400) 
    country = models.ForeignKey(Country, blank=True, null=True) 

और यह मेरा serializer है:

class PostSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = Post 
     fields = ('user', 'post', 'country',) 

    def create(self, validated_data): 
     post = Post(
       user = User.objects.get(username='MyUser'), 
       post = validated_data['post'], 
     ) 

     if validated_data.get('country', None): 
      post.country = validated_data['country'] 

     return post 

वहाँ मुझे डीआरएफ बताने के लिए कोई तरीका है कि यदि का मान क्षेत्र शून्य है (क्योंकि 'देश' फ़ील्ड वैकल्पिक है और कभी-कभी प्रदान नहीं किया जाता है) फिर इसे छोड़ने के लिए और केवल अन्य डेटा को क्रमबद्ध करने के लिए? या कम से कम किसी के मूल्य के साथ serialize?

मुझे नहीं लगता कि मैं SerializerMethodField (http://www.django-rest-framework.org/api-guide/fields/#serializermethodfield) का उपयोग कर सकता हूं क्योंकि 'देश' फ़ील्ड केवल पढ़ने योग्य फ़ील्ड नहीं है (यदि यह प्रदान किया जाता है तो भी मैं इसे लिखता हूं)।

मूल रूप से किसी ऑब्जेक्ट को क्रमबद्ध करते समय मैं मूल रूप से फ़ील्ड को छोड़ना चाहता हूं (या कम से कम मूल्य बना सकता हूं) यदि फ़ील्ड शून्य है।

उत्तर

3

डीआरएफ 3.2.4 के रूप में, इतने लंबे समय आप मॉडल क्षेत्र के लिए

blank=True 

जोड़ने के रूप में की जरूरत नहीं है जैसे इतना:

class Post(models.Model): 
    country = models.ForeignKey(Country, blank=True) 

तो डीआरएफ के रूप में वैकल्पिक जब serializing और यह deserializing (ध्यान दें, हालांकि अगर कोई अशक्त = है कि वहाँ मॉडल मैदान पर यह सच है क्षेत्र व्यवहार करेंगे, तो Django यदि आप करने की कोशिश में एक त्रुटि बढ़ा देंगे रों फ़ील्ड प्रदान किए बिना डेटाबेस में ऑब्जेक्ट ऑब्जेक्ट करें)।

अधिक जानकारी के लिए यहाँ जवाब देखें: DjangoRestFramework - correct way to add "required = false" to a ModelSerializer field?

आप पूर्व डीआरएफ 3.2.4 का उपयोग कर रहे हैं, तो आप serializer में क्षेत्र ओवरराइड कर सकते हैं और आवश्यक जोड़ें = यह गलत। निर्दिष्ट करने या क्या स्पष्ट रूप क्षेत्रों अधिभावी के बारे में अधिक जानकारी के लिए यहां दस्तावेज़ देखें: http://www.django-rest-framework.org/api-guide/serializers/#specifying-fields-explicitly

तो कुछ इस तरह (ध्यान दें कि मैं पूरी तरह से नीचे दिए गए कोड का परीक्षण नहीं किया था, लेकिन यह इन पंक्तियों के साथ कुछ होना चाहिए):

class PostSerializer(serializers.ModelSerializer): 
    country = serializers.PrimaryKeyRelatedField(required=False) 
    class Meta: 
     model = Post 
     fields = ('user', 'post', 'country',) 
2

यह धागा उपयोगी हो सकता है:

https://stackoverflow.com/a/28870066/4698253

यह मूल रूप से कहता है कि आप एक मामूली संशोधन के साथ to_representation() फ़ंक्शन ओवरराइड कर सकते हैं।

मैं टिप्पणी में इस डाल दिया है, लेकिन मैं पर्याप्त अंक अभी तक :(

संबंधित मुद्दे