【问题标题】:How to show multiple fields within a row? (Django Admin)如何在一行中显示多个字段? (Django 管理员)
【发布时间】:2021-03-01 04:04:42
【问题描述】:

我一直在与 Django/Mysql 中的情况作斗争。

表中存在该列同时具有主键和外键。此列与中间表具有一对多关系。

这是与植物物种相关的状态列表。有些物种可以在不止一个州找到。

  • 物种(表 1) 列:Species_id |物种名称
  • Species_to_states(表 2)列:Species_id | State_id
  • 状态(表 3)列:States_id、State_name

Models.py(以下代码)

class Listaflor(models.Model):
    especie = models.OneToOneField(Flora2Estado, models.DO_NOTHING, primary_key=True)
class Flora2Estado(models.Model):
    estado = models.OneToOneField(Estados, models.DO_NOTHING, primary_key=True)
    especie = models.ForeignKey('Listaflor', models.DO_NOTHING)
class Estados(models.Model):
    estado_id = models.AutoField(primary_key=True)
    estado_nome = models.CharField(max_length=100, blank=True, null=True)
    nome_abbr = models.CharField(max_length=2, blank=True, null=True)
    criadoem = models.DateTimeField(db_column='criadoEm')  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'estados'
        verbose_name = "Estados"
        verbose_name_plural = "Estado"
    def str(self):
        return self.estado_nome+ " (" + self.nome_abbr+")"

关键是在 django admin 中只显示一个对象(检查下图)。所以我想在一行中显示多个字段。

有人可以帮我吗?

非常感谢

class floAdmin(admin.ModelAdmin):

    list_display = ('especie','familia','regiaopred','emailautor','aprovado','datacriado','especie_0')
    fieldsets = (
        ('Editar:', {
            'fields': (

                'especie','familia','regiaopred','emailautor','aprovado','datacriado','especie_0'
                #'pes_vinculo_tipo'
                )
            }),
        )

就像下图一样,我想在 django admin 的一行中显示“迈阿密、纽约和缅因州”,例如。这可能吗?

【问题讨论】:

  • 我很困惑......为什么你有Listaflor.especie 作为OneToOne 字段到Flora2Estado 并且还有Flora2Estado.especie 作为ForeignKeyListaflor?跨度>
  • 您能分享一下您的管理员模型吗?
  • @Chris 我只需要在 listaflor.especie 上设置 oneToMany 吗?
  • 感谢大家的关注!
  • @Jay,我不确定您要完成什么。但是,是的,建立这两种关系是不寻常的。

标签: python mysql sql django


【解决方案1】:

我不明白您想在单元格中获取什么信息,但想建议您使用下一种方法:

class floAdmin(admin.ModelAdmin):

    list_display = ('especie', 'familia', 'regiaopred', 'emailautor', 'aprovado', 'datacriado', 'especie_0', 'custom_field', )
    fieldsets = (
        ('Editar:', {
            'fields': ('especie', 'familia', 'regiaopred', 'emailautor', 'aprovado', 'datacriado', 'especie_0', 'custom_field', )
            }),
        )

    def custom_field(self, obj):
        data_list_to_show = []  # get data based on obj
        return data_list_to_show 

【讨论】:

  • 您好,非常感谢您的建议。我到底应该在 data_list_to_show 中加入什么?我想在同一行显示多个“estado_nome”。再次感谢您抽出宝贵时间。
  • data_list_to_show 中,您应该放置多个“estado_nome”对象(id,或指向对象的链接,任何您需要的东西)。
  • 我再次编辑了我最初的问题。由于我的英语给我带来了麻烦,我用例子画了一张桌子。非常感谢。
  • 我已经尝试过您建议的代码:def custom_field(self, obj): data_list_to_show = [Estados.estado_nome],管理员中显示以下消息:
  • 您的 AdminModel 类应该与特定的 DjangoModel 相关,在您的情况下该模型是什么?你不能这样做[Estados.estado_nome],在这里你尝试获取类属性,你需要使用对象属性,请尝试从obj获取你需要的所有信息。
猜你喜欢
  • 1970-01-01
  • 2019-08-12
  • 2016-06-20
  • 2022-11-08
  • 2014-12-01
  • 1970-01-01
  • 2017-05-08
  • 2017-02-01
  • 1970-01-01
相关资源
最近更新 更多