1

我的问题是下一个:我有带有一些参数的设备表,其中一个是 device_able,如果它是“启用”,我会用它做点什么。我在管理操作中添加了两个操作,它们在 True 或 False 上更改 device_able 的状态并且它可以工作,但是当我从表中打开任何设备时,我的复选框总是被选中,即使它是 False。我知道我不会从数据库中检查有关复选框状态的数据,但该怎么做呢?我必须使用模板,但我不明白如何将检查复选框状态的模板从数据库连接到我的开发应用程序的管理视图。你能给我一些有用的链接来探索吗?或者我可以在我的 admin.py 文件中检查状态?

在我的models.py

class Dev(models.Model):
    #some params for device
    device_able = models.BooleanField(default=False, choices=((True, 'enable'), (False, 'disable')))
    def __unicode__(self):
        return self.device_model

在 admin.py

class DevAdminForm(forms.ModelForm):    
    class Meta:
        widgets = {
            'device_able': forms.CheckboxInput
        }

我的 admin.py 的完整代码

from django.contrib import admin
from dev.models import Dev
from django import forms

def make_enable(self, request, queryset):
    queryset.update(device_able=True)
make_enable.short_description = "Mark selected devices as enable"   
def make_disable(self, request, queryset):
    queryset.update(device_able=False)
make_disable.short_description = "Mark selected devices as disable"

class DevAdminForm(forms.ModelForm):

    class Meta:
        widgets = {
            'device_able': forms.CheckboxInput
        }


class DevAdmin(admin.ModelAdmin): 
    fields = ['device_model', 'resolution', 'assets_format', 'scale_factor', 'device_able']
    list_display = ('device_model', 'resolution', 'assets_format', 'scale_factor', 'device_able')
    search_fields = ['device_model']
    actions = [make_enable, make_disable]
    form = DevAdminForm

class DevInline(admin.SimpleListFilter):
    model = Dev

admin.site.register(Dev, DevAdmin)
4

2 回答 2

1

如果您在管理视图中,则应使用管理模块中的 AdminModel 类将模型绑定到表单。如果您使用 ModelForm,您必须提供它所绑定的模型。

也就是说,在您的 cse 中,为您的模型子类化 AdminModle 的唯一需要是插入管理操作,默认情况下,BooleanField 由 CheckboxInput 表示。

我会在你的 admin.py 中尝试:

class DevAdmin(admin.AdminModel): 


    def make_device_able()
    ...

    actions = [make_device_able]

并使用以下方式注册课程:

admin.site.register(Dev, DevAdmin)

希望能帮助到你。

于 2013-07-03T10:21:29.380 回答
0

我找到了解决我的问题的方法。首先,django 非常酷,可以为您工作。创建模型时,我将“device_able”设置为 models.CharField。它在 db 字段中创建,类型为 varchar。之后,我将模型“device_able”更改为 models.BooleanField,并直接在“bool”上的“device_able”字段的 db 类型中进行了更改。但是我的复选框总是被选中,因为只有空字符串返回 False。当我使用相同的代码创建新项目时,我的意思是 device_able = models.BooleanField,我的复选框开始正常工作!

于 2013-07-17T10:33:11.580 回答