sccrthlt
sccrthlt

Reputation: 4344

'dict' object has no attribute '_meta'

def participant_specific_donation(self, participant):
    donations = Donation.objects.filter(participant = participant)

    helper = {}

    for donation in donations:
        ##helper['donation_date'] = donation.date
        helper['donation_amount'] = donation.amount
    return helper

def participant_specific(request, participant):
helper = RelayFunctions()
info = helper.participant_specific_donation(participant)
info1 = helper.participant_specific_milestone(participant)

data = [ 'participant_specific_donation' : info , 'participant_specific_milestone' : info1 ]
json_serializer = serializers.get_serializer("json")()
response = json_serializer.serialize(data, ensure_ascii=False)
return HttpResponse(response, mimetype="application/json")

Error: 'dict' object has no attribute '_meta' Does this have to do with how I call the dictionary? I wanted to combine two objects into an one. Then parse it to json.

Here's the traceback.

Traceback:
 File "/home/vtrelayc/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response
   111.                         response = callback(request, *callback_args, **callback_kwargs)
 File "/home/vtrelayc/projects/relay/relayapp/views.py" in participant_specific
   192.     response = json_serializer.serialize(data, ensure_ascii=False)
 File "/home/vtrelayc/lib/python2.6/site-packages/django/core/serializers/__init__.py" in serialize
  98.     s.serialize(queryset, **options)
File "/home/vtrelayc/lib/python2.6/site-packages/django/core/serializers/base.py" in serialize
  46.             concrete_model = obj._meta.concrete_model

Exception Type: AttributeError at /participants/specific/1/
Exception Value: 'dict' object has no attribute '_meta'

def participant_specific(request, participant):
helper = RelayFunctions()
info = helper.participant_specific_donation(participant)
info1 = helper.participant_specific_milestone(participant)
data = [ 'participant_specific_donation' : info , 'participant_specific_milestone' : info1 ]
json_serializer = serializers.get_serializer("json")()
response = json_serializer.serialize(data, ensure_ascii=False) ...
return HttpResponse(response, mimetype="application/json")

Upvotes: 0

Views: 11596

Answers (1)

asheeshr
asheeshr

Reputation: 4114

There are two problems that I see in the code snippet.

First, logical issue here :

for donation in donations:
    ##helper['donation_date'] = donation.date
    helper['donation_amount'] = donation.amount

If donations has multiple elements then you will end up with only the last element in the list, as you are looping over the donations and assigning the value every time to helper.

I think you want to calculate the total amount, which you can do as shown :

helper['donation_amount'] += donation.amount

Second, the line :

data = [ 
    'participant_specific_donation': info,
    'participant_specific_milestone': info1 
]

will give you a syntax error.

It appears that you need a dictionary over here. The correct way to intialize a dictionary is by using the { } braces :

data = { 
    'participant_specific_donation': info, 
    'participant_specific_milestone': info1
}

If you want all the donations in a single place, you can make a list first :

donation_amount = [donation for donation in donations]

and then assign it to the helper dictionary :

helper['donation_amount'] = donation_amount

Upvotes: 1

Related Questions