在我的项目中,我有一个带有另一个外键的表。 在Django管理中,我将显示两个表中的字段。 这是我的原始模型:
class t_time(models.Model):
history_main = models.IntegerField(default=0)
elapsed_t = models.DecimalField(max_digits=20, decimal_places=6, default=Decimal('0.0000'))
在admin.py中,我尝试从提取中进行查询,并将表中的其他字段添加到我的视图中,但可能在某些方面我错了。我尝试像这样覆盖get_queryset:
class t_timeAdmin(admin.ModelAdmin):
list_display = ('id','hist_data','elapsed_t')
def get_queryset(self, request):
queryset = super().get_queryset(request)
myqs = t_history.objects.get(id=t_time.history_main)
queryset = queryset.annotate(
_hist_data=myqs.test_type,
#_villain_count=Count("villain", distinct=True),
)
return queryset
def hist_data(self, obj):
return obj._hist_data
但是我收到有关返回类型(int)的错误,该错误可能与annotate()指令有关。 如何将查询中的其他字段添加到django管理员视图?
非常感谢
答案 0 :(得分:0)
这是使用OneToOneFields解决问题的一种方法。
models.py
class DataModel(models.Model):
name = models.TextField(max_length=100)
def __str__(self):
return '%s' % self.name
def two_fields(self):
id = self.id
field1 = ModelData.objects.get(connected_table_id=id).data1
field2 = ModelData.objects.get(connected_table_id=id).data2
return '%s %s' % (field1, field2)
class ModelData(models.Model):
data1 = models.IntegerField()
data2 = models.IntegerField()
connected_table = models.OneToOneField(DataModel,
related_name="DataModel",
on_delete=models.CASCADE,
)
def extramethod(self):
code = self.connected_table_id
format_code = DataModel.objects.get(id=code).name
return format_code
admin.py
@admin.register(ModelData)
class ModelDataAdmin(admin.ModelAdmin):
list_display = ('id', 'data1', 'data2', 'connected_table', 'extramethod',)
@admin.register(DataModel)
class ModelDataAdmin(admin.ModelAdmin):
list_display = ('name', 'two_fields',)