मैं एक लिखने योग्य नेस्टेड धारावाहिक बनाने की कोशिश कर रहा हूं। मेरा मूल मॉडल गेम है और नेस्टेड मॉडल मापन हैं। मैं इस डेटा को AJAX का उपयोग करके अपने डीआरएफ एप्लिकेशन में पोस्ट करने की कोशिश कर रहा हूं। हालांकि, डेटा पोस्ट करने का प्रयास करते समय, नेस्टेड मापन खाली ऑर्डर्ड डिक्ट() हैं।कई घोंसला वाली वस्तुओं के साथ Django Rest Framework लिखने योग्य नेस्टेड धारावाहिक
class Game(models.Model):
start_timestamp = models.DateTimeField(auto_now_add=False)
end_timestamp = models.DateTimeField(auto_now_add=False)
date_added = models.DateTimeField(auto_now_add=True)
class Measurement(models.Model):
game = models.ForeignKey(Game, on_delete=models.PROTECT, related_name='measurements')
measurement_type = models.CharField(max_length=56)
measurement = models.CharField(max_length=56)
timestamp = models.DateTimeField(auto_now_add=False)
date_added = models.DateTimeField(auto_now_add=True)
यहाँ मेरी serializers हैं::
class MeasurementSerializer(serializers.ModelSerializer):
timestamp = serializers.DateTimeField(input_formats=(['%Y-%m-%d %H:%M:%S.%Z', 'iso-8601']), required=False)
class Meta:
model = Measurement
fields = ('measurement_type', 'measurement', 'timestamp')
class GameSerializer(serializers.ModelSerializer):
start_timestamp = serializers.DateTimeField(input_formats=(['%Y-%m-%d %H:%M:%S.%Z', 'iso-8601']))
end_timestamp = serializers.DateTimeField(input_formats=(['%Y-%m-%d %H:%M:%S.%Z', 'iso-8601']))
measurements = MeasurementSerializer(many=True)
class Meta:
model = Game
fields = ('id', 'start_timestamp', 'end_timestamp', 'measurements')
def create(self, validated_data):
measurements = validated_data.pop('measurements')
game = Game.objects.create(**validated_data)
for measurement in measurements:
Measurement.objects.create(game=game, **measurement)
return game
खेल के लिए मेरा विचार निम्नलिखित है:
class GameList(generics.ListCreateAPIView):
queryset = Game.objects.all()
serializer_class = GameSerializer
मैं संरचना के लिए this tutorial पीछा
यहाँ मेरी मॉडल हैं।
मैं AJAX के माध्यम से इस एपीआई को पोस्ट करने के लिए कोशिश कर रहा हूँ, नीचे दिए गए कोड:
$.ajax({
url: base_url + '/games/',
dataType: "json",
data: {
"start_timestamp": "2016-02-16 14:51:43.000000",
"end_timestamp": "2016-02-16 14:53:43.000000",
"measurements":[
{'measurement_type':'type1', 'measurement':'71', 'timestamp':'2016-02-16 14:53:43.000000'},
{'measurement_type':'type1', 'measurement':'72', 'timestamp':'2016-02-16 14:54:43.000000'},
{'measurement_type':'type1', 'measurement':'73', 'timestamp':'2016-02-16 14:55:43.000000'},
]
},
type: 'POST'
})
.error(function(r){})
.success(function(data){})
});
इस डेटा पोस्टिंग पर, मैं GameSerializer भीतर बनाने के विधि में लगता है कि validate_data.pop ('माप') इसमें 3 आदेशित शब्दकोशों (ऑर्डर्ड डिक्ट()) की एक सूची है जो खाली हैं।
अद्यतन: मैं पाया है कि request.data द्वारा आने initial_data इसलिए की तरह संरचित है:
'emotion_measurements[0][measurement_type]' (4397175560) = {list} ['type1']
'emotion_measurements[0][measurement]' (4397285512) = {list} ['71']
'emotion_measurements[0][timestamp]' (4397285600) = {list} ['2016-02-16 14:53:43.000000']
'emotion_measurements[1][measurement_type]' (4397175040) = {list} ['type1']
'emotion_measurements[1][measurement]' (4397285864) = {list} ['72']
'emotion_measurements[1][timestamp]' (4397285952) = {list} ['2016-02-16 14:54:43.000000']
'emotion_measurements[2][measurement_type]' (4397175040) = {list} ['type1']
'emotion_measurements[2][measurement]' (4397285864) = {list} ['73']
'emotion_measurements[2][timestamp]' (4397285952) = {list} ['2016-02-16 14:55:43.000000']
किसी को भी पहले इस समस्या का सामना करना पड़ा है? धन्यवाद!
अद्यतन # 2
मैं इस को हल करने (हालांकि मेरा मानना है कि यह एक समाधान की तुलना में एक समाधान के अधिक है) मेरी MeasurementSerializer के लिए निम्न जोड़कर कर रहा था:
def to_internal_value(self, data):
formatted_data = json.dumps(data)
formatted_data = formatted_data.replace("[", "").replace("]","")
formatted_data = json.loads(formatted_data)
return formatted_data
मापन डेटा आ रहा जब मैं मानता हूं कि मुझे डिक्ट की जरूरत है तो एक प्रश्नोत्तरी थी। कुंजी और मूल्यों के आस-पास कुछ अतिरिक्त ब्रैकेट भी थे इसलिए मुझे उन्हें भी हटाना पड़ा।
अभी भी इससे बेहतर जवाब मांगना!
क्या आप 'self.initial_data.get (' माप ') में क्या देख सकते हैं? और, बस सुरक्षित पक्ष पर रहने के लिए: जांचें कि आपके सर्वर को JSON क्या प्राप्त हुआ है। (आपका AJAX कोड ठीक दिखता है और यह निश्चित रूप से सर्वर के रूप में निश्चित रूप से पहुंचता है - लेकिन अच्छी तरह से ...) – Risadinha
एकमात्र ऐसा लगता है कि मैं आपके कोड को कई बार देखने के बाद पा सकता हूं कि शायद (शायद!) आपका टाइमस्टैम्प विश्लेषण करने में विफल रहता है आपके पैटर्न के लिए। मुझे कुछ और नहीं मिल रहा है, मेरे स्वयं के धारावाहिकों और डीआरएफ उदाहरण की तुलना में भी। चूंकि टाइमस्टैम्प वैकल्पिक है, बस यह सुनिश्चित करने के लिए, इन मानों के बिना इसका परीक्षण करें।लेकिन अगर यह समस्या है, तो सवाल यह होगा कि आप सत्यापन त्रुटियों को क्यों नहीं देख रहे हैं। – Risadinha
@Risadinha मैंने प्रारंभिक_डेटा संरचना के साथ अद्यतन किया है। संरचना एक QueryDict है, जो मैं बहुत परिचित नहीं हूँ। मेरे पास विचार करने की एक ही ट्रेन थी जिसमें टाइमस्टैम्प की आवश्यकता नहीं थी, यदि यह दिनांक समय स्वरूपण मुद्दा था लेकिन फिर भी वही समस्या थी। –