Ich weiß, dass diese Frage schon oft gestellt wurde, aber ich habe keine Lösung gefunden, die mein Problem gelöst hat. Grundsätzlich habe ich eine Methode in einer Klassenansicht in Django, und diese Methode ruft eine andere Methode auf, die eine AttributeError
: 'WSGIRequest' object has no attribute 'send_email'
auslöst.'WSGIRequest' Objekt hat keine Attributmethode
Dies ist der Code:
class PartyListView(ListView):
# ...
# ...
def approve_party(self, party_id):
returnObj = {}
# get the party by id
party = party_repo.get_party_by_id(party_id)
if party is None:
returnObj['message'] = "The requested party doesn't exist."
jsonObj = json.dumps(returnObj)
return HttpResponse(jsonObj, status=404, content_type="application/json")
# change the status to Approved
party.party_status = Core.PartyStatus.Approved
party.save()
# email the party team on the approval
self.send_email(True, party)
# return a json success response
returnObj['message'] = "The party has been approved."
jsonObj = json.dumps(returnObj)
return HttpResponse(jsonObj, status=200, content_type="application/json")
def send_email(self, isApprovalEmail, party):
username = self.request.user.username
from_email = username + "@example.com"
recipient_list = [party.host.student_email]
cc = ['[email protected]']
if isApprovalEmail:
subject = "APPROVED Party Registration for {}".format(party.party_time)
body = "approval email"
email = EmailMessage(subject, body, from_email, recipient_list, cc=cc)
email.send()
else:
subject = "REJECTED Party Registration for {}".format(party.party_time)
body = "rejection email"
email = EmailMessage(subject, body, from_email, recipient_list, cc=cc)
email.send()
# ...
# ...
ich folgende Dinge ausprobiert haben:
- die Reihenfolge des Verfahrens neu anordnen
send_email
: Überapprove_party
, oben unten, am Boden. - Schreiben Sie die gesamte Datei in einen anderen Editor, ohne etwas zu kopieren.
- Verwenden Sie PyCharms Convert-Einrückungen in Leerzeichen, um sicherzustellen, dass der Eindruck gut ist.
- Schreiben Sie andere Dummy-Funktionen in der Klasse und versuchen Sie sie von
approve_party
aufrufen - keiner von ihnen funktioniert.
Hier ist die vollständige Rückverfolgung:
Internal Server Error: /admin/parties/approve/151
Traceback (most recent call last):
File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\exception.py", line 41, in inner
response = get_response(request)
File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Program Files\Python36\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:/Programming/Party-Reg\admin_dashboard\views.py", line 93, in approve_party
self.send_email(True, party)
AttributeError: 'WSGIRequest' object has no attribute 'send_email'
[05/Dec/2017 18:07:19] "GET /admin/parties/approve/151 HTTP/1.1" 500 17786
Und approve_party
in urls.py
registriert ist wie folgt:
urlpatterns = [
# ...,
url(r'^parties/approve/([0-9]*$)', views.PartyListView.approve_party, name="Approve Party"),
# ...
]
Bitte den vollständigen Traceback einbeziehen. – Alasdair
@Alasdair Ich aktualisierte die Frage mit dem vollständigen Traceback. –
Bitte zeigen Sie den Code an, der 'approve_party' aufruft. – Alasdair