如何在 Django 管理列表显示页面中编辑 ManyToManyField?
How To Edit ManyToManyField In Django Admin list Display Page?
我想在 Django 管理 list_display 页面中添加可编辑的 Many2Many 字段。
模型结构如下,
class Genre(models.Model):
name = models.CharField(max_length=250, unique=True)
class Movie(models.Model):
name = models.CharField(max_length=250)
genre = models.ManyToManyField(Genre)
我试过,
class MovieAdmin(admin.ModelAdmin):
list_display = ['name', 'genre']
list_editable = ['genre']
以上会引发错误。
据我了解,您想在管理页面中添加模型。
为此,您只需在 django 应用程序中的 admin.py 文件中执行此操作
admin.site.register(电影管理员)
它是自动可编辑的。希望这有帮助。
Django 默认不允许在 ModelAdmin 的 list_editable 中添加 ManyToManyField。所以我们需要覆盖模型管理方法。
在查看您的模型时,您需要按照以下步骤在列表显示页面中获得可编辑的 ManyToManyField。
在apps/forms.py中您需要定义您需要在列表显示页面中编辑哪些ManyToMany字段。如下,
from django import forms
from app.models import Genre
class MovieChangeListForm(forms.ModelForm):
# here we only need to define the field we want to be editable
genre = forms.ModelMultipleChoiceField(queryset=Genre.objects.all(),
required=False)
在 app/admin.py 中,您需要重写模型管理的方法。如下,
from django.contrib import admin
from django.contrib.admin.views.main import ChangeList
from app.models import Movie
from app.forms import MovieChangeListForm
class MovieChangeList(ChangeList):
def __init__(self, request, model, list_display,
list_display_links, list_filter, date_hierarchy,
search_fields, list_select_related, list_per_page,
list_max_show_all, list_editable, model_admin):
super(MovieChangeList, self).__init__(request, model,
list_display, list_display_links, list_filter,
date_hierarchy, search_fields, list_select_related,
list_per_page, list_max_show_all, list_editable,
model_admin)
# these need to be defined here, and not in MovieAdmin
self.list_display = ['action_checkbox', 'name', 'genre']
self.list_display_links = ['name']
self.list_editable = ['genre']
class MovieAdmin(admin.ModelAdmin):
def get_changelist(self, request, **kwargs):
return MovieChangeList
def get_changelist_form(self, request, **kwargs):
return MovieChangeListForm
admin.site.register(Movie, MovieAdmin)
现在你们都准备检查更改,运行 服务器并检查 django admin 的 Movie 模型。您可以直接从列表显示页面编辑 ManyToMany 字段。
注意 : 如果你打算在列表中使用可编辑的多个 ManyToManyFields,那么你需要在 settings.py 中设置 DATA_UPLOAD_MAX_NUMBER_FIELDS .
我想在 Django 管理 list_display 页面中添加可编辑的 Many2Many 字段。 模型结构如下,
class Genre(models.Model):
name = models.CharField(max_length=250, unique=True)
class Movie(models.Model):
name = models.CharField(max_length=250)
genre = models.ManyToManyField(Genre)
我试过,
class MovieAdmin(admin.ModelAdmin):
list_display = ['name', 'genre']
list_editable = ['genre']
以上会引发错误。
据我了解,您想在管理页面中添加模型。
为此,您只需在 django 应用程序中的 admin.py 文件中执行此操作
admin.site.register(电影管理员)
它是自动可编辑的。希望这有帮助。
Django 默认不允许在 ModelAdmin 的 list_editable 中添加 ManyToManyField。所以我们需要覆盖模型管理方法。
在查看您的模型时,您需要按照以下步骤在列表显示页面中获得可编辑的 ManyToManyField。
在apps/forms.py中您需要定义您需要在列表显示页面中编辑哪些ManyToMany字段。如下,
from django import forms
from app.models import Genre
class MovieChangeListForm(forms.ModelForm):
# here we only need to define the field we want to be editable
genre = forms.ModelMultipleChoiceField(queryset=Genre.objects.all(),
required=False)
在 app/admin.py 中,您需要重写模型管理的方法。如下,
from django.contrib import admin
from django.contrib.admin.views.main import ChangeList
from app.models import Movie
from app.forms import MovieChangeListForm
class MovieChangeList(ChangeList):
def __init__(self, request, model, list_display,
list_display_links, list_filter, date_hierarchy,
search_fields, list_select_related, list_per_page,
list_max_show_all, list_editable, model_admin):
super(MovieChangeList, self).__init__(request, model,
list_display, list_display_links, list_filter,
date_hierarchy, search_fields, list_select_related,
list_per_page, list_max_show_all, list_editable,
model_admin)
# these need to be defined here, and not in MovieAdmin
self.list_display = ['action_checkbox', 'name', 'genre']
self.list_display_links = ['name']
self.list_editable = ['genre']
class MovieAdmin(admin.ModelAdmin):
def get_changelist(self, request, **kwargs):
return MovieChangeList
def get_changelist_form(self, request, **kwargs):
return MovieChangeListForm
admin.site.register(Movie, MovieAdmin)
现在你们都准备检查更改,运行 服务器并检查 django admin 的 Movie 模型。您可以直接从列表显示页面编辑 ManyToMany 字段。
注意 : 如果你打算在列表中使用可编辑的多个 ManyToManyFields,那么你需要在 settings.py 中设置 DATA_UPLOAD_MAX_NUMBER_FIELDS .