Как добавить поля из разных моделей в одном представлении администратора? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь создать отдельную запись на странице администратора, где я могу видеть поля, которые меня интересуют из разных моделей на одной странице.

get_sensor_id определен в модели с именем MountingSensor, отдельно от SensorViewTypeBackgroundInfo

@admin.register(SensorViewTypeBackgroundInfo)
class SensorViewBackground(admin.ModelAdmin):
    model = SensorView
    fields = ('sensor_view_id', 'sensor_view_name')
    list_display = ('enum_name', 'info_id', 'get_sensor_id')

В настоящее время я получаю следующую ошибку:

Значение «list_display [2]» относится к «get_sensor_id», который не является вызываемым, атрибутом «SensorViewBackground» илиатрибут или метод в app.SensorViewTypeBackgroundInfo

Следуя некоторым советам, я отредактировал код в models.py следующим образом

class SensorViewTypeBackgroundInfo(models.Model):
     info_id = models.ForeignKey(Sensor, null=True, related_name="unique_id", on_delete=models.SET_NULL, db_column='sensor_id')
     enum_name = models.TextField(blank=True, null=True)

     def get_sensor_id(self, obj):
         return MountedSensor.objects.get(mounted_sensor_id)

class MountedSensor(models.Model):
     sensor_id = models.IntegerField(unique=True)
     mounted_sensor_id = models.IntegerField(primary_key=True)

И теперь я получаю следующую ошибку:

Ошибка типа: get_sensor_id () отсутствует 1 обязательный позиционный аргумент: 'obj'

1 Ответ

0 голосов
/ 16 мая 2019

Если между вашими моделями есть какая-то связь, вы можете использовать admin.TabularInline .

Редактировать: Вы говорите о list_displays, что означает, что вам нужны новые столбцы в вашем списке, верно? В этом случае вы можете попробовать что-то вроде этого:

@admin.register(SensorViewTypeBackgroundInfo)
class SensorViewBackground(admin.ModelAdmin):
    model = SensorView
    fields = ('sensor_view_id', 'sensor_view_name')
    list_display = ('enum_name', 'info_id', 'get_sensor_id')

    def get_sensor_id(self, obj):
        # Here you could get the information you need from your another model
        return MountedSensor.objects.get(...).field

Вы можете удалить метод get_sensor_id из SensorViewTypeBackgroundInfo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...