Note that there are some explanatory texts on larger screens.

plurals
  1. PODjango Serialization of DateTime Objects within Dictionary
    text
    copied!<p>My Django view method is below. I want to pass place_data as a response from an HTTPRequest (within a getJSON call on the client side, but that's irrelevant to the issue). </p> <p>I can pass the dictionary fine until I include the <strong>event_occurrences</strong>, which is doing some behind the scenes work to pass a dictionary of events with start and end times. </p> <pre><code>def mobile_place_detail(request,place_id): callback = request.GET.get('callback', 'callback') place = get_object_or_404(Place, pk=place_id) event_occurrences = place.events_this_week() place_data = { 'Name': place.name, 'Street': place.street, 'City': place.city, 'State': place.state, 'Zip': place.zip, 'Telephone': place.telephone, 'Lat':place.lat, 'Long':place.long, 'Events': event_occurrences, } xml_bytes = json.dumps(place_data) if callback: xml_bytes = '%s(%s)' % (callback, xml_bytes) print xml_bytes return HttpResponse(xml_bytes, content_type='application/javascript; charset=utf-8') </code></pre> <p>Here is the code attempting to do the serialization of the event_occurrences dictionary:</p> <pre><code> def events_this_week(self): return self.events_this_week_from_datetime( datetime.datetime.now() ) def events_this_week_from_datetime(self, now): event_occurrences = [] for event in self.event_set.all(): event_occurrences.extend(event.upcoming_occurrences()) event_occurrences.sort(key=itemgetter('Start Time')) counter = 0 while counter &lt; len(event_occurrences) and event_occurrences[0]['Start Time'].weekday() &lt; now.weekday(): top = event_occurrences.pop(0) event_occurrences.insert(len(event_occurrences), top) counter += 1 json_serializer = serializers.get_serializer("json")() return json_serializer.serialize(event_occurrences, ensure_ascii=False) return event_occurrences </code></pre> <p>The call to <strong>event.upcoming_occurrences</strong> references the function below:</p> <pre><code>def upcoming_occurrences(self): event_occurrences = [] monday_time = datetime.datetime.combine(datetime.date.today() + relativedelta(weekday=MO), self.start_time) all_times = list(rrule(DAILY, count=7, dtstart=monday_time)) weekday_names = ('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday') for idx, weekday in enumerate(weekday_names): if getattr(self, weekday): event_occurrences.append({ 'Name': self.name, 'Start Time': all_times[idx], 'End Time': all_times[idx] + datetime.timedelta(minutes=self.duration) }) return event_occurrences </code></pre> <p><strong>This is giving me the following error:</strong></p> <pre><code>Exception Type: AttributeError Exception Value: 'dict' object has no attribute '_meta' </code></pre> <p>I realize I cannot just call json.dumps() on my <strong>event_occurrences</strong> object, but can't figure out how to get around this serialization error (and this is my first time working with serialization in Python). Could someone please give me some direction as how and where the serialization needs to take place?</p> <p><em><strong>Thank you in advance!</em></strong></p> <p><em><strong>UPDATE: Added function calls to help with clarity of question. Please see above.</em></strong></p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload