Django-переключение между логическим и целым числом в TabularInline

У меня есть некоторые модели в 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 в count).

Есть ли в любом случае, чтобы отобразить флажок, 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,)
    ...

1 ответ

  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 в inline