हम एक एपीआई बना रहे हैं जिसे उपयोगकर्ता को रिकॉर्ड अपडेट करने की अनुमति देने की आवश्यकता है। कई मामलों में, एक स्थिति अद्यतन या नाम परिवर्तन की तरह, केवल एक फ़ील्ड बदल जाएगा। यह एक पैच अनुरोध के लिए उपयुक्त उपयोग-केस परिदृश्य प्रतीत होता है। जैसा कि मैं समझता हूं कि यह एक 'आंशिक' अद्यतन है।Django REST Framework पैच आवश्यक फ़ील्ड पर विफल रहता है
हमने Django के आरईएसटी फ्रेमवर्क को लागू किया है और इस मुद्दे में भाग लिया है। "खाताउज़र" जैसे रिकॉर्ड के लिए मैं केवल नाम फ़ील्ड बदलना चाहता हूं इसलिए मैं निम्नलिखित अनुरोध भेजता हूं: पैच/एपीआई/उपयोगकर्ता/1/HTTP/1.1 होस्ट: लोकलहोस्ट एक्स-सीएसआरएफटीकेन: 111122223333444455556666 सामग्री-प्रकार : आवेदन/json; charset = UTF-8 कैश-नियंत्रण: नहीं कैश
{ "fullname": "John Doe" }
रिकॉर्ड स्पष्ट रूप से इस तरह के 'खाता' जो एक नया के लिए आवश्यक है के रूप में 'से संबंधित' क्षेत्रों के एक जोड़े सहित अन्य गुण होते हैं रिकॉर्ड। अनुरोध जमा करते समय, प्रतिक्रिया निम्नलिखित शरीर के साथ एक 400 त्रुटि है: {"खाता": ["यह फ़ील्ड आवश्यक है।" ]} उपयोगकर्ता के लिए serializer इस तरह दिखता है:
class AccountUserSerializer(serializers.ModelSerializer):
account = serializers.PrimaryKeyRelatedField()
class Meta:
model = AccountUser
fields = ('id', 'account', 'fullname', ...)
depth = 1
और मॉडल इस तरह दिखता है:
class AccountUser(models.Model):
''' Account User'''
fullname = models.CharField(max_length=200,
null=True,blank=True)
account = models.ForeignKey(Account,
on_delete=models.PROTECT
)
objects = AccountUserManager()
def __unicode__(self):
return self.email
class Meta:
db_table = 'accounts_account_user'
मैं यहाँ कुछ गलत कर रहा हूँ या है यह गलत अद्यतन करने के लिए सक्षम होने की अपेक्षा करने के लिए एक रिकॉर्ड पर एक ही क्षेत्र इस तरह से। धन्यवाद! यह समुदाय चट्टानों!
संपादित करें: का अनुरोध किया - AccountUserManager:
class AccountUserManager(BaseUserManager):
def create_user(self, email, account_name):
username = hash_email_into_username(email)
...
account = Account.objects.get(name=account_name)
account_user = AccountUser(email=email,user=user,account=account)
account_user.save()
return account_user
एक' related_name जोड़ने का प्रयास करें = 'account'' देख सकते हैं, .. '' –
Account' मॉडल पर रिवर्स लुकअप के लिए ही है यही कारण है कि। –
कर सकते हैं आप अपना 'AccountUserManager' पोस्ट करते हैं? मुझे लगता है कि समस्या यह है कि प्रबंधक' pk = 1' पर ऑब्जेक्ट वापस नहीं कर रहा है और इसलिए आपके पैच कॉल (जिसे 'partial_update' कहते हैं) सोचता है कि इसे एक नया उदाहरण बनाने की आवश्यकता है। –