1

私の問題は次のとおりです。いくつかのパラメーターを持つデバイス テーブルがあり、そのうちの 1 つは device_able です。True または False で device_able の状態を変更する管理アクションに 2 つのアクションを追加しましたが、機能しますが、テーブルからデバイスを開くと、False であってもチェックボックスが常にオンになります。チェックボックスの状態についてdbからのデータをチェックしていないことは理解しましたが、どうすればよいですか? テンプレートを使用する必要がありますが、チェックボックスの状態をチェックするテンプレートをデータベースから開発アプリの管理ビューに接続する方法がわかりません。探索に役立つリンクを教えてください。または、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 として設定しました。タイプvarcharのdbフィールドに作成されました。その後、モデル「device_able」をmodels.BooleanFieldに変更し、「bool」の「device_able」フィールドのdbタイプを直接変更しました。しかし、空の文字列のみが False を返すため、チェックボックスは常にチェックされていました。同じコードで新しいプロジェクトを作成したとき、つまりdevice_able = models.BooleanField、チェックボックスが正しく機能し始めました!

于 2013-07-17T10:33:11.580 に答える