我可以通过db查看复选框的查看状态

时间:2013-07-03 07:04:22

标签: django

我的问题是下一个:我的设备表有一些参数,其中一个是device_able,如果它是'enable'我将用它做一些事情。我在管理操作中添加了两个操作,这些操作在True或False上更改了device_able的状态并且它可以工作,但是当我从表中打开任何设备时,我的复选框总是被检查,即使它是False。我明白我不会从db检查有关复选框状态的数据,但是如何做到这一点?我必须使用模板,但我不明白如何连接我的模板,检查从db的复选框状态到我的管理员视图的Dev应用程序。你能给我一些有用的探索链接吗?或者我可以在我的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)

2 个答案:

答案 0 :(得分:1)

如果您在管理视图中,则应使用admin模块中的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)

希望它有所帮助。

答案 1 :(得分:0)

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