私はインラインがこのようなものに行く方法だとは思わない。 staff-memberにイベントに関わる電子メールを送信するように指示し、実際にどの通知が通知されるかを制御する必要がある場合は、中間表示を使用する必要があります。
まず、イベントに属するユーザーを選択できるフォームが必要です。最初はusers
フィールドをすべてのユーザーに設定しましたが、フォームの__init__
メソッドでは、「イベント」kwargを使用してそれに基づいてフィールドをフィルタリングします。
class UserNotifyForm(forms.Form):
users = forms.ModelMultipleChoiceField(queryset=User.objects.all(), widget=forms.CheckboxSelectMultiple())
def __init__(self, *args, **kwargs):
event = kwargs.pop('event')
super(UserNotifyForm, self).__init__(*args, **kwargs)
if event:
self.fields['users'].queryset = event.users.all()
第二には、あなただけの通常のフォームビューとして動作することを、あなたのModelAdmin
上のビューを作成します。
def notify_users_view(self, request, object_id):
event = get_object_or_404(Event, id=object_id)
if len(request.POST):
form = UserNotifyForm(request.POST, event=event)
if form.is_valid():
users = form.cleaned_data.get('users')
# send email
return HttpResponseRedirect(reverse('admin:yourapp_event_changelist'))
else:
form = UserNotifyForm(event=event)
return render_to_response('path/to/form/template.html', {
'event': event,
'form': form,
}, context_instance=RequestContext(request))
あなたはもちろん、このためのテンプレートを作成する必要がありますが、それは簡単です十分な。フォームは既に各ユーザーに1つのチェックボックスのリストを表示するように設定されているため、そこに必要なすべての情報があります。
第三に、あなたのModelAdmin
年代のURLには、このビューを結ぶ:
def change_view(self, request, object_id, extra_context=None):
response = super(MyModelAdmin, self).change_view(request, object_id, extra_context=extra_context)
if len(request.POST):
info = (self.model._meta.app_label, self.model._meta.module_name)
response['Location'] = reverse('admin:%s_%s_notify', args=(object_id,))
# Note: this will effectively negate the 'Save and Continue' and
# 'Save and Add Another' buttons. You can conditionally check
# for these based on the keys they add to request.POST and branch
# accordingly to some other behavior you desire.
return response
を理由だけで作成することによってそれを解決しない:保存した後、このビューにリダイレクトする
change_view
をオーバーライドし、四通知を受信した(または受信しなかった)すべてのユーザーをフィルタリングするユーザーモデルのフィルタ?その後、通知を送信する管理アクションを作成することができます。 –
手順は次のとおりです。指定された劇場演劇と関係があるユーザーをフィルタする。スタッフが、どのリプライズ(イベント)の通知を受け取るのかを指定するようにしてください。それらのすべてが必要ではありません(たとえば、ディレクターはすべてのリプレゼンテーションに出席していません)。この操作は、スタッフがこの特定のイベントに関する他のすべての情報を提出している間に行われます。 – tookanstoken
それははるかに明確になります。では、イベントの多対多をUserにリンクさせることで解決してみませんか?これは、[filter_horizontal](https://docs.djangoproject.com/ja/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.filter_horizontal)や[inline](https: //docs.djangoproject.com/ja/dev/ref/contrib/admin/#working-with-many-to-many-models)。これらのユーザーに通知を送信することができます。 –