Django表单

2024-09-30 16:23:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我问了一个与此相关的问题。但我想最好直接问我的问题。 我有一个“User”表,它与另外两个表“Domain”和“Groups”有许多关系。 所以在管理界面中,我把组和域看作2个modelmultipechoicefields。 但我想在用户界面上以更友好的方式呈现它们。 我想用一个复选框显示域和组中的每个可用选项,该复选框根据用户属性被选中/取消选中。 我想知道我是否可以在管理或我需要写我自己的视图独立于管理。在


Tags: 用户视图界面属性关系domain选项方式
3条回答

它实际上在管理中默认使用模型表单。所以,你需要重写它。在

from django import forms
from django.forms import widgets

class DomainForm(forms.ModelForm):

    field2 = YourField(widget=widgets.CheckboxSelectMultiple)

    class Meta:
        model = Domain()
        fields = ('field1', 'field2')

因此,在本例中,我覆盖了默认的FIELD2字段类型。在

准确地说,它是Django管理员选择在ManyToManyField中显示的widget。 在本例中,您觉得它的SelectMultiple小部件不太友好。在

很简单的一点是,您可以在使用自己的ModelForm时选择小部件。 但如果你想在Django Admin中那样做,你需要往返。看看这个。在

from django.forms import widgets
from django.contrib import admin

class MyModelAdmin(admin.ModelAdmin):
    def formfield_for_manytomany(self, db_field, request=None, **kwargs):
    """
    Get a form Field for a ManyToManyField.
    """
    # If it uses an intermediary model, don't show field in admin.
    if db_field.rel.through is not None:
        return None

    if db_field.name in self.raw_id_fields:
        kwargs['widget'] = admin.widgets.ManyToManyRawIdWidget(db_field.rel)
        kwargs['help_text'] = ''
    elif db_field.name in (list(self.filter_vertical) + list(self.filter_horizontal)):
        kwargs['widget'] = admin.widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
    else:
        kwargs['widget'] = widgets.CheckboxSelectMultiple()
        kwargs['help_text'] = ''

    return db_field.formfield(**kwargs)

现在,在管理员py作为

^{pr2}$

你现在会在DJango管理中看到复选框。当然,您需要一些CSS更改。在

我认为内置小部件CheckboxSelectMultiple可以满足您的需要。如果没有,你就必须创建你自己的小部件。documentation for widgets是一个很好的起点。最简单的方法是从Django源代码复制一个现有的小部件并对其进行修改。在

相关问题 更多 >