gpt4 book ai didi

python - 在 Django Admin 中将 ManyToManyWidget 添加到 ManyToManyField 的反面

转载 作者:IT老高 更新时间:2023-10-28 22:08:11 26 4
gpt4 key购买 nike

假设我在 Django 1.4 中有一个简单的博客应用程序:

class Post(models.Model):
title = …
published_on = …
tags = models.ManyToManyField('Tag')

class Tag(models.Model):
name = …

即一个帖子有很多标签。在 Django 管理员上,我得到了一个不错的 <select multi>如果我包括 tagsfields对于PostAdmin .有没有一种简单的方法可以在 <select multi> 中包含帖子列表(作为简单的 TagAdmin ) ?我试着把 fields = ['name', 'posts']TagAdmin并得到了 ImproperlyConfigured错误。 (post_set 的结果相同)。

我对 Django 没问题,所以可以创建一个适当的 AdminForm 和 Admin 对象,但我希望有一个 Right Way™ 来做。

最佳答案

这可以通过自定义表单来实现。

from django.contrib import admin
from django import forms

from models import Post, Tag

class PostAdminForm(forms.ModelForm):
tags = forms.ModelMultipleChoiceField(
Tag.objects.all(),
widget=admin.widgets.FilteredSelectMultiple('Tags', False),
required=False,
)

def __init__(self, *args, **kwargs):
super(PostAdminForm, self).__init__(*args, **kwargs)
if self.instance.pk:
self.initial['tags'] = self.instance.tags.values_list('pk', flat=True)

def save(self, *args, **kwargs):
instance = super(PostAdminForm, self).save(*args, **kwargs)
if instance.pk:
instance.tags.clear()
instance.tags.add(*self.cleaned_data['tags'])
return instance

class PostAdmin(admin.ModelAdmin):
form = PostAdminForm

admin.site.register(Post, PostAdmin)

如果您想要垂直堆叠的小部件,可以将其中的 False 替换为 True

关于python - 在 Django Admin 中将 ManyToManyWidget 添加到 ManyToManyField 的反面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9879687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com