【问题标题】:Django - Switch between boolean and integer in TabularInlineDjango - 在 TabularInline 中的布尔值和整数之间切换
【发布时间】:2016-05-04 12:33:03
【问题描述】:

我在 Django 中有一些这样的模型:

class Object(models.Model):
    ...

class ObjectFeatures(models.Model):
    class Meta:
        unique_together = (('object', 'feature'),)
    count = models.PositiveSmallIntegerField()
    object = models.ForeignKey(...)
    feature = models.ForeignKey(...)

class Feature(models.Model):
    is_number = models.BooleanField()
    ...

我有一个对象,在这个对象中有一个在管理面板中带有ObjectFeature 的内联表单。您可以在此处从功能中选择要添加的功能,以及该功能的可用数量。

is_number 定义该功能是否需要一个数字,或者如果为 false,则需要一个布尔值(计数为 0 或 1)。

TabularInline 需要一个布尔值而不是一个整数时,是否有在TabularInline 中显示一个复选框,尽管它是一个IntegerField

另一种可能性是在object_features 中定义一个布尔值和一个整数字段。根据is_number 中的值,我是否可以只显示其中一个?

在 admin.py 中:

class ObjectFeatureInline(admin.TabularInline):
    model = ObjectFeature
    can_delete = True
    verbose_name_plural = 'Object features'

class ObjectAdmin(admin.ModelAdmin):
    inlines = (ObjectFeatureInline,)
    ...

【问题讨论】:

    标签: python django django-modeladmin modeladmin


    【解决方案1】:

    在你的内联

        def new_field(self, obj):
            if type(obj.is_number) is bool:
                do stuff - as bool
            else:
                do other stuff , maybe check if int and so on...
        new_field.allow_tags = True
        new_field.short_description = 'is_number verbose'
    

    将 new_field 添加到内联的 readonly_fields 中

    【讨论】:

    • 我希望能够更改管理面板中的值。此解决方案只会提供一个只读字段。我正在寻找一种可以向用户显示复选框而不是数字输入字段的方法,但前提是复选框合适。
    猜你喜欢
    • 2022-07-26
    • 2016-11-16
    • 1970-01-01
    • 2018-05-16
    • 2017-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多