2017-08-27 4 views
0

初心者はpythonとdjangoを使用しています。私はdjango管理サイトに問題があります。adminサイトテーブルの多くの関係から各データへのリンクを提供する方法

私の計画は、管理サイトテーブルに表示される多数の関係から、既存のデータに異なるURLを与えることです。データをクリックすると、編集ページが表示されます。上の写真のように

# 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' 

enter image description here

、私はデータを表示するために管理が、そのURLを追加して混乱。だから、最高のソリューションを提供できるあなたには非常に感謝しています。

答えて

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-文字列を使用する(!):

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' 
関連する問題