如何在同一管理视图中添加来自不同模型的字段?

时间:2019-05-16 13:32:01

标签: django django-models

我正在尝试创建一个单独的管理页面条目,在这里我可以看到同一页面上不同型号的感兴趣的字段。

get_sensor_id在名为MountedSensor的模型中定义,与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)

我现在遇到以下错误:

  

TypeError:get_sensor_id()缺少1个必需的位置参数:   'obj'

1 个答案:

答案 0 :(得分:0)

如果模型之间存在某种关系,则可以使用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方法。