Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 强制使用';过滤器水平';对于重新定义的模型字段_Django_Django Models_Django Admin_Django Forms - Fatal编程技术网

Django 强制使用';过滤器水平';对于重新定义的模型字段

Django 强制使用';过滤器水平';对于重新定义的模型字段,django,django-models,django-admin,django-forms,Django,Django Models,Django Admin,Django Forms,我有一个模型字段users,但修改了它的输出,有效地覆盖了unicode: from django import forms class UserModelMultipleChoiceField(forms.ModelMultipleChoiceField): def label_from_instance(self, obj): return "%s, %s" % (obj.last_name, obj.first_name) 而且 from django.cont

我有一个模型字段
users
,但修改了它的输出,有效地覆盖了unicode

from django import forms

class UserModelMultipleChoiceField(forms.ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        return "%s, %s" % (obj.last_name, obj.first_name)
而且

from django.contrib.admin.widgets import FilteredSelectMultiple

class ArticleAdminModelForm(BaseAdminModelForm):

    users = UserModelMultipleChoiceField(
        queryset = User.objects.order_by('last_name', 'first_name'))

    class Meta:
        model = get_model('articles', 'article')
        widgets = BaseAdminModelForm.Meta.widgets

        # Trying to force filter_horizontal -- but to no avail.
        widgets = {
            'users': FilteredSelectMultiple(
                verbose_name="users",
                is_stacked=True,
                attrs={
                    'class': 'filtered',
                })
        })
但是我仍然丢失了管理中的
filter\u horizontal
小部件。似乎它只与model/dbfields有着千丝万缕的联系。。。我在django.contrib.admin.options.py(第157行)中标识了这个区域


因此,对于在“表单”中重新定义的dbfield m2m字段,如何“强制”使用
filter\u horizontal

在ArticleAdminModelForm中的用户定义中定义小部件是一种方法,如果您使用的是普通ModelMultipleEchoiceField。当对字段进行子类化时,python默认情况下不会调用其超类init方法(但可能背后有一些django魔法),因此您可能需要自己实现init方法,正如它在


尚未测试此功能是否有效;)

在ArticleAdminModelForm内的用户定义中定义小部件是一种方法,如果您使用的是普通ModelMultipleChiiceField。当对字段进行子类化时,python默认情况下不会调用其超类init方法(但可能背后有一些django魔法),因此您可能需要自己实现init方法,正如它在

尚未测试此功能是否有效;)

def formfield_for_manytomany(self, db_field, request=None, **kwargs):
    """
    Get a form Field for a ManyToManyField.
    """
    # If it uses an intermediary model that isn't auto created, don't show
    # a field in admin.
    if not db_field.rel.through._meta.auto_created:
        return None
    db = kwargs.get('using')

    if db_field.name in self.raw_id_fields:
        kwargs['widget'] = widgets.ManyToManyRawIdWidget(db_field.rel, using=db)
        kwargs['help_text'] = ''
    elif db_field.name in (list(self.filter_vertical) + list(self.filter_horizontal)):
        kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
users = forms.ModelMultipleChoiceField(
        widget=FilteredSelectMultiple(
                                      verbose_name='aktive_mitarbeiter',
                                      is_stacked=False
                                     )
        queryset=User.objects.filter(is_active=True)
        )