Вы должны написать код, чтобы достичь того, чего вы хотите, так как Джанго администратор обеспечивает измените форму для модели, в которой есть поле M2M, а именно User
, так как m2m до Group
находится внутри этой модели.
Так что, в основном, делая это полностью в администраторе django и приятно, вам, вероятно, нужно переопределить несколько функций и обеспечить собственную реализацию.
class GroupForm(forms.Form):
blah
users = forms.ModelMultipleChoiceField(
label=_('Users'), required=False, queryset=User.objects.all(),
widget=FilteredSelectMultiple(is_stacked=True, verbose_name=_('Users')),help_text=mark_safe("Help text")
)
class GroupAdmin(BaseAdmin):
form = GroupForm
# you can here define fieldsets to render your form more beautifully
def save_related(self, request, form, formsets, change):
current_group = form.instance
# ....
# Update relations between users and the group here, both are
# accessible with the form instance
def get_changeform_initial_data(self, request):
# If you want to render the form with initial data for the user
# you may optionally override this method as well.
initial = super(GroupAdmin, self).get_changeform_initial_data(request)
initial.update({'users': ...})
return initial
Это самый способ, который я нахожу, чтобы реализовать то, что вы хотите! Надеюсь, это поможет или даст вам идею
прекрасно работает. Спасибо. – guettli
Отсутствует импорт: из django.contrib.admin.widgets import FilteredSelectMultiple – jocassid
При попытке этого я нашел, что он не работает, и он не должен соответствовать https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/# the-save-method - вы должны вызвать parent save с commit = True, а затем сохранить данные «многие-ко-многим» в методе save_m2m. –