私は現在、複雑な管理ページを持っているプロジェクトに取り組んでいます。1つ以上のビューを持つModelAdminを作成する
現在、私が達成しようとしているのは、ユーザーがレポートを追加した後に、このレポートが多数のデータをチェックし、エリア内の人々のリストを作成する(10km未満)場合です。だから、あなたが見つけたすべての人とその電子メールを一覧表示するビューに変更ビューを保存するをクリックするとレポートを追加すると、追加する人を選択して、より多くのことをする別のボタンを押すことができます。次のように
私のコードは次のようになります。電話/ email.htmlの
admin.register(Report)
class ReportAdmin(admin.ModelAdmin):
change_form_template = 'admin/phone/index.html'
# inlines = [SubjectInLine]
def response_change(self, request, obj):
"""
Determines the HttpResponse for the change_view stage.
"""
opts = self.model._meta
msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)}
context = {}
if "_email" in request.POST:
msg = _('Report Saved - Now please select the store below you would like to notify.') % msg_dict
self.message_user(request, msg, messages.SUCCESS)
payload = {'address': str(obj.location.address1) + ' ' + str(obj.location.address2)}
start = requests.get("https://maps.googleapis.com/maps/api/geocode/json", params=payload)
start = start.json()
start_long = start['results'][0]['geometry']['location']['lng']
start_lat = start['results'][0]['geometry']['location']['lat']
start_loc = (float(start_lat), float(start_long))
clients = Clients.objects.filter()
context['report'] = obj
in_ten = []
for c in clients:
payload = {'address': str(c.address1) + ' ' + str(c.address2)}
end = requests.get("https://maps.googleapis.com/maps/api/geocode/json", params=payload)
try:
end = end.json()
end_long = end['results'][0]['geometry']['location']['lng']
end_lat = end['results'][0]['geometry']['location']['lat']
end_loc = (float(end_lat), float(end_long))
distance = vincenty(start_loc, end_loc).kilometers
if (distance < 10 and c.pk != obj.location.pk):
in_ten.append(c)
except:
print(str(c) + " Bad Address")
context["clients"] = in_ten
obj.save()
return render(request,'phone/email.html',context)
elif "_confirm-email" in request.POST:
print ("HELLO")
print (context["report"])
return render(request, 'phone/email.html', context)
else:
msg = _('The %(name)s "%(obj)s" was changed successfully.') % msg_dict
self.message_user(request, msg, messages.SUCCESS)
return self.response_post_save_change(request, obj)
def get_actions(self, request):
actions = super(ReportAdmin, self).get_actions(request)
if 'delete_selected' in actions:
del actions['delete_selected']
return actions
コード:
{% extends "admin/base_site.html" %}
{% load i18n admin_urls admin_static admin_modify %}
{% block extrahead %}{{ block.super }}
<script type="text/javascript" src="{% url 'admin:jsi18n' %}"></script>
{{ media }}
{% endblock %}
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
{% block coltype %}colM{% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %}
{% block content %}<div id="content-main">
<form {% if has_file_field %}enctype="multipart/form-data" {% endif %}action="{{ form_url }}" method="post" id="{{ opts.model_name }}_form" novalidate>{% csrf_token %}{% block form_top %}{% endblock %}
<h1>Email Section</h1>
<div style="height:500px">
<table>
<th>Location</th>
<th>Email</th>
<th>Include in Email?</th>
{% for c in clients %}
<tr>
<td>{{ c.name }}</td>
<td>{{ c.contact_email }}</td>
<td><input type="checkbox" name="{{c.name}}"></td>
</tr>
{% endfor %}
</table>
<div class="submit-row">
<input type="submit" value="{% trans 'Email Confirmation' %}" class="default" name="_email-confirm" />
</div>
</div>
</form></div>
{% endblock %}
ですから、私は_emailボタンに気づくとき、私はその後、response_changeメソッドをオーバーライドしていることがわかります私は新しいページをレンダリングしました。今これは動作します。この新しいテンプレートがレンダリングされ、_email-confirmボタンを押すと、ページが最初からリロードされ、印刷ステートメントは表示されません。
洞察力はすばらしいでしょう。