Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 字典中DateTime对象的Django序列化_Python_Django_Datetime_Serialization - Fatal编程技术网

Python 字典中DateTime对象的Django序列化

Python 字典中DateTime对象的Django序列化,python,django,datetime,serialization,Python,Django,Datetime,Serialization,下面是我的Django视图方法。我希望将place_数据作为来自HTTPRequest的响应传递(在客户端的getJSON调用中,但这与问题无关) 我可以很好地传递字典,直到我包含事件\u发生次数,它正在做一些幕后工作来传递带有开始和结束时间的事件字典 def mobile_place_detail(request,place_id): callback = request.GET.get('callback', 'callback') place = get_object_o

下面是我的Django视图方法。我希望将place_数据作为来自HTTPRequest的响应传递(在客户端的getJSON调用中,但这与问题无关)

我可以很好地传递字典,直到我包含事件\u发生次数,它正在做一些幕后工作来传递带有开始和结束时间的事件字典

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')
以下是尝试对事件字典进行序列化的代码:

 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 < len(event_occurrences) and event_occurrences[0]['Start Time'].weekday() < 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
这给了我以下错误:

Exception Type: AttributeError
Exception Value:    'dict' object has no attribute '_meta'
我意识到我不能对我的事件\u出现次数对象调用json.dumps(),但我不知道如何避免这个序列化错误(这是我第一次在Python中使用序列化)。有人能给我一些关于序列化需要如何进行以及在哪里进行的指导吗

提前感谢您


更新:添加了函数调用,以帮助澄清问题。请参见上文。

Django的序列化框架用于查询集,而不是DICT。如果只想将字典转储到JSON,只需使用
JSON.dumps
。通过传入自定义序列化类,可以很容易地序列化对象-Django中已经包含了一个处理日期时间的类:

from django.core.serializers.json import DjangoJSONEncoder
json.dumps(mydict, cls=DjangoJSONEncoder)

困惑的那
json\u序列化程序
代码与上面的函数有什么关系?它叫什么名字?为什么不能在字典上也使用
json.dumps
?你为什么不接受一个问题的答案?哇!谢谢你,丹尼尔。这正是我想要的-啊,Django总是让事情变得如此简单。谢谢,这正是我想要的答案!
from django.core.serializers.json import DjangoJSONEncoder
json.dumps(mydict, cls=DjangoJSONEncoder)