【问题标题】:How to provide links to each data from many to many relationships on the admin site table如何在管理站点表上提供从多对多关系到每个数据的链接
【发布时间】:2017-08-27 00:32:35
【问题描述】:

我是使用 python 和 django 的新手,我在 django 管理站点有问题。

我的计划是为管理站点表上出现的多对多关系中的任何现有数据提供不同的 URL。点击data siswa会跳转到编辑页面。

# model.py
class WaliSiswa(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
    title = models.CharField(max_length=11, choices=TITLE)
    nama_lengkap = models.CharField(max_length=125)
    jenis_kelamin = models.CharField(max_length=1, choices=GENDER_CHOICES)
    relations = models.CharField(max_length=50, choices=RELATIONS)
    tempat_lahir = models.CharField(max_length=255)
    tanggal_lahir = models.DateField()
    alamat_ktp = models.CharField(max_length=500)
    alamat_tinggal_saat_ini = models.CharField(max_length=500)
    profesi = models.CharField(max_length=225)
    nomer_telepon = models.CharField(max_length=25)
    nomer_seluler = models.CharField(max_length=25)
    email = models.CharField(max_length=125)
    siswa = models.ManyToManyField(Siswa)

# admin.py
class WaliSiswaAdmin(admin.ModelAdmin):
    list_display = ('getTitleNamaLengkap', 'relations', 'getSiswa', )

    def getSiswa(self, obj):
        return ', '.join([d.nama_lengkap for d in obj.siswa.all()])
    getSiswa.short_description = 'Siswa'

就像上图一样,我设法显示了数据,但很困惑地添加了它的 url。所以我非常感谢你能提供最好的解决方案。

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    Django 文档向您介绍了如何reverse admin urls。

    另外,我们需要非常方便的format_html_join 方法。

    # admin.py
    
    from django.core.urlresolvers import reverse  # django 1.9-
    from django.urls import reverse  # django 1.10+
    from django.utils.html import format_html_join
    
    class WaliSiswaAdmin(admin.ModelAdmin):
        list_display = ('getTitleNamaLengkap', 'relations', 'getSiswa', )
    
        def getSiswa(self, obj):
            # Signature: format_html_join(sep, format_string, args_generator)
            return format_html_join(
                   ', ', 
                   '<a href="{}">{}</a>', 
                   [(reverse('admin:<your_app_name>_siswa_change', args=(d.id,)), d.nama_lengkap) for d in obj.siswa.all()]
            )
        getSiswa.short_description = 'Siswa'
    

    如果您使用的是 Python 3.6,请使用 f-strings (!):

    from django.core.urlresolvers import reverse  # django 1.9-
    from django.urls import reverse  # django 1.10+
    from django.utils.html import mark_safe
    
    class WaliSiswaAdmin(admin.ModelAdmin):
        list_display = ('getTitleNamaLengkap', 'relations', 'getSiswa', )
    
        def getSiswa(self, obj):
            return mark_safe(
                ', '.join([f'<a href="{reverse("admin:<your_app_name>_siswa_change", args=(d.id,))}">{d.nama_lengkap}</a>' for d in obj.siswa.all()])
            )
        getSiswa.short_description = 'Siswa'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多