Python Django Admin中的Multiselect表单

Python Django Admin中的Multiselect表单,python,django,django-forms,django-admin,Python,Django,Django Forms,Django Admin,我正在尝试向我的管理视图添加一个对应于char字段的multi-select小部件 型号.py class Campaign(models.Model): name = models.CharField(max_length=128) start_date = models.DateTimeField(default=timezone.now) end_date = models.DateTimeField(blank=True, null=True) budge

我正在尝试向我的管理视图添加一个对应于char字段的multi-select小部件

型号.py

class Campaign(models.Model):
    name = models.CharField(max_length=128)
    start_date = models.DateTimeField(default=timezone.now)
    end_date = models.DateTimeField(blank=True, null=True)
    budget = models.IntegerField()
    target = models.IntegerField()
    component_choices = models.CharField(max_length=128, null=True, blank=True)
class CampaignAdmin(admin.ModelAdmin):
    fieldsets = (
        ('Main', {
            'fields': ('name', ('start_date', 'end_date',),),
        }),
        ('Budget', {
            'fields': ('budget', 'target',),
        }),
        ('Payment', {
            'fields': ('payment_terms', 'payment_initial', 'payment_per_mvm'),
        }),
    )

    form = ComponentChoicesForm

admin.site.register(Campaign, CampaignAdmin)
class ComponentChoicesForm(ModelForm):

    component_type_choices = tuple(
        (x.id, str(x))
        for x in ComponentType.objects.all()
    )

    class Meta:
        model = ComponentType
        fields = '__all__'

    available_components = forms.MultipleChoiceField(
        choices=component_type_choices)
admin.py

class Campaign(models.Model):
    name = models.CharField(max_length=128)
    start_date = models.DateTimeField(default=timezone.now)
    end_date = models.DateTimeField(blank=True, null=True)
    budget = models.IntegerField()
    target = models.IntegerField()
    component_choices = models.CharField(max_length=128, null=True, blank=True)
class CampaignAdmin(admin.ModelAdmin):
    fieldsets = (
        ('Main', {
            'fields': ('name', ('start_date', 'end_date',),),
        }),
        ('Budget', {
            'fields': ('budget', 'target',),
        }),
        ('Payment', {
            'fields': ('payment_terms', 'payment_initial', 'payment_per_mvm'),
        }),
    )

    form = ComponentChoicesForm

admin.site.register(Campaign, CampaignAdmin)
class ComponentChoicesForm(ModelForm):

    component_type_choices = tuple(
        (x.id, str(x))
        for x in ComponentType.objects.all()
    )

    class Meta:
        model = ComponentType
        fields = '__all__'

    available_components = forms.MultipleChoiceField(
        choices=component_type_choices)
forms.py

class Campaign(models.Model):
    name = models.CharField(max_length=128)
    start_date = models.DateTimeField(default=timezone.now)
    end_date = models.DateTimeField(blank=True, null=True)
    budget = models.IntegerField()
    target = models.IntegerField()
    component_choices = models.CharField(max_length=128, null=True, blank=True)
class CampaignAdmin(admin.ModelAdmin):
    fieldsets = (
        ('Main', {
            'fields': ('name', ('start_date', 'end_date',),),
        }),
        ('Budget', {
            'fields': ('budget', 'target',),
        }),
        ('Payment', {
            'fields': ('payment_terms', 'payment_initial', 'payment_per_mvm'),
        }),
    )

    form = ComponentChoicesForm

admin.site.register(Campaign, CampaignAdmin)
class ComponentChoicesForm(ModelForm):

    component_type_choices = tuple(
        (x.id, str(x))
        for x in ComponentType.objects.all()
    )

    class Meta:
        model = ComponentType
        fields = '__all__'

    available_components = forms.MultipleChoiceField(
        choices=component_type_choices)

但是,上面的代码只显示
字段集
,根本不显示
组件类型选择
表单。我的目的是让用户从我在
admin.py
中的
forms.py
中生成的选项中进行选择,以填充
Campaign.component\u choices
字段。

您已经为不同的模型创建了一个表单,并在活动模型管理中使用了它。您应该为
活动
模型而不是
组件类型
创建模型表单

您的表单和模型管理员应该是这样的

forms.py

class CampaignForm(ModelForm):

    class Meta:
        model = Campaign
        fields = '__all__'

    OPTIONS = (('a', 'A'),('b', 'B'),('c', 'C'))

    available_components = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple,
                                     choices=OPTIONS) 
管理员

class CampaignAdmin(admin.ModelAdmin):
    form = CampaignForm

这不起作用,我仍然没有在管理视图中看到任何小部件将您的模型更改为元功能中的活动。是的,我也尝试过。我认为字段集覆盖了自定义表单。所以我必须把我的字段集写成一个表格