Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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:Admin:在Admin中更改字段的小部件_Django_Django Admin_Boolean_Field_Django Widget - Fatal编程技术网

Django:Admin:在Admin中更改字段的小部件

Django:Admin:在Admin中更改字段的小部件,django,django-admin,boolean,field,django-widget,Django,Django Admin,Boolean,Field,Django Widget,我有一个布尔值的模型,如下所示: class TagCat(models.Model): by_admin = models.BooleanField(default=True) 这在管理中显示为复选框 我怎么能用它作为管理中的单选按钮 此外,我如何使它始终与管理中的某个选定值 另外,当非管理员用户添加一个TagCat时,我希望默认值是相反的。这个领域应该对他隐藏起来 有人能告诉我怎么做吗?Django文档似乎没有这么详细。更新1:完成1的代码(不要忘记将选项传递到模型中的布尔字段)

我有一个布尔值的模型,如下所示:

class TagCat(models.Model):
    by_admin = models.BooleanField(default=True) 
这在管理中显示为复选框

  • 我怎么能用它作为管理中的单选按钮
  • 此外,我如何使它始终与管理中的某个选定值
  • 另外,当非管理员用户添加一个
    TagCat
    时,我希望默认值是相反的。这个领域应该对他隐藏起来

  • 有人能告诉我怎么做吗?Django文档似乎没有这么详细。

    更新1:完成1的代码(不要忘记将选项传递到模型中的布尔字段)

    从main.models导入标记cat
    从django.contrib导入管理
    来自django导入表单
    类MyTagCatAdminForm(forms.ModelForm):
    类元:
    型号=标记猫
    小部件={
    “by_admin”:forms.RadioSelect
    }
    Django 3.x所需的字段='uuu all_uuuuu'#
    类TagCatAdmin(admin.ModelAdmin):
    表单=MyTagCatAdminForm
    管理站点注册(TagCat、TagCatAdmin)
    
    单选按钮看起来丑陋且移位,但至少可以工作

  • 我在MyModel.py中使用以下信息解决了此问题:
  • BYADMIN\u选项=(
    (1,“是”),
    (0,“否”),
    )
    类别标记cat(models.Model):
    by_admin=models.BooleanField(选项=BYADMIN_选项,默认值=1)
    
    还有另一种方法可以做到这一点,那就是,如果您希望相同类型的每个字段都有相同的小部件,我会更容易。这是通过向ModelAdmin指定formfield_覆盖来完成的。例如:

    class MyModelAdmin(admin.ModelAdmin):
        formfield_overrides = {
            models.TextField: {'widget': RichTextEditorWidget},
        }
    
    文档中的更多内容:

    更新:链接到Django 2.0版本:

    以下是mgPePe响应的更动态的扩展:

    class MyAdminForm(forms.ModelForm):
        def __init__(self, *args, **kwargs):
            super(MyAdminForm, self).__init__(*args, **kwargs)
    
            self.fields['by_admin'].label = 'My new label'
            self.fields['by_admin'].widget = forms.RadioSelect()
    
    
        class Meta:
            model = TagCat
    
    class MyAdmin(admin.ModelAdmin):
        fields = ['name', 'by_admin']
        form = MyAdminForm
    

    这样,您就可以完全控制字段。

    您的第一个问题在中得到了回答。我确实读过这个问题。答案似乎说明了如何在一般情况下替换它,而我只希望具体情况是无线电。最后一个答案似乎是我想要的,我尝试了,但没有成功,因为在管理中,只有标签出现。我将把我的代码粘贴为“更新1”,在最近的Django版本中,向元类添加
    字段='\uuuu all\uuuu'
    行似乎是必要的。如果要覆盖字段类型,请使用
    form\u class
    ;e、 g.忽略小数中的逗号:
    formfield_overrides={models.DecimalField:{'form_class':MyDecimalField}