MCPcopy
hub / github.com/django/django / formfield_for_manytomany

Method formfield_for_manytomany

django/contrib/admin/options.py:347–395  ·  view source on GitHub ↗

Get a form Field for a ManyToManyField.

(self, db_field, request, **kwargs)

Source from the content-addressed store, hash-verified

345 return db_field.formfield(**kwargs)
346
347 def formfield_for_manytomany(self, db_field, request, **kwargs):
348 """
349 Get a form Field for a ManyToManyField.
350 """
351 # If it uses an intermediary model that isn't auto created, don't show
352 # a field in admin.
353 if not db_field.remote_field.through._meta.auto_created:
354 return None
355 db = kwargs.get("using")
356
357 if "widget" not in kwargs:
358 autocomplete_fields = self.get_autocomplete_fields(request)
359 if db_field.name in autocomplete_fields:
360 kwargs["widget"] = AutocompleteSelectMultiple(
361 db_field,
362 self.admin_site,
363 using=db,
364 )
365 elif db_field.name in self.raw_id_fields:
366 kwargs["widget"] = widgets.ManyToManyRawIdWidget(
367 db_field.remote_field,
368 self.admin_site,
369 using=db,
370 )
371 elif db_field.name in [*self.filter_vertical, *self.filter_horizontal]:
372 kwargs["widget"] = widgets.FilteredSelectMultiple(
373 db_field.verbose_name, db_field.name in self.filter_vertical
374 )
375 if "queryset" not in kwargs:
376 queryset = self.get_field_queryset(db, db_field, request)
377 if queryset is not None:
378 kwargs["queryset"] = queryset
379
380 form_field = db_field.formfield(**kwargs)
381 if (
382 isinstance(form_field.widget, SelectMultiple)
383 and form_field.widget.allow_multiple_selected
384 and not isinstance(
385 form_field.widget, (CheckboxSelectMultiple, AutocompleteSelectMultiple)
386 )
387 ):
388 msg = _(
389 "Hold down “Control”, or “Command” on a Mac, to select more than one."
390 )
391 help_text = form_field.help_text
392 form_field.help_text = (
393 format_lazy("{} {}", help_text, msg) if help_text else msg
394 )
395 return form_field
396
397 def get_autocomplete_fields(self, request):
398 """

Callers 1

formfield_for_dbfieldMethod · 0.95

Calls 5

get_field_querysetMethod · 0.95
getMethod · 0.45
formfieldMethod · 0.45

Tested by

no test coverage detected