django распечатать список объектов администратора - PullRequest
0 голосов
/ 18 марта 2019

Моя пользовательская модель выглядит следующим образом.

**model.py**
class User(models.Model):
    #user_idx = models.AutoField('user-num', primary_key=True)
    user_idx = models.OneToOneField(Counsel, primary_key=True, db_column="user_idx", related_name="useridx" , on_delete="models.DO_NOTHING")
    district_id = models.IntegerField(blank=True, null=True)
    user_email = models.CharField(unique=True, max_length=200)
    user_password = models.CharField(max_length=200)
    user_name = models.CharField(max_length=100)

    class Meta:
        managed = False
        db_table = 'user'


           verbose_name_plural = "USER"

class Counsel(models.Model):
    counsel_idx = models.AutoField(primary_key=True)
    category_sub_idx = models.IntegerField(blank=True, null=True)
    user_idx = models.IntegerField()
    counsel_title = models.CharField(max_length=255)
    counsel_contents = models.TextField()
    counsel_status = models.CharField(max_length=1, choices=COUNSEL_STATUS)
    answer_count = models.IntegerField()
    hit = models.IntegerField()
    user_ip = models.CharField(max_length=20, blank=True, null=True)
    register_date = models.DateTimeField()
    update_date = models.DateTimeField()
    deleted = models.CharField(max_length=1, choices=DELETE_STATUS)

Администратор django затем создал источник следующим образом:

class UserAdmin(admin.ModelAdmin):
    list_display = ('user_idx', 'show_firm_url', 'user_name',)

    def show_firm_url(self, obj):
        return format_html("<a href='/admin/user/view/{0}'>{1}</a>", obj.user_idx, obj.user_email)

    show_firm_url.short_description = 'E-mail'

Результаты похожи на изображения. enter image description here

Объект Адвокат (1494) Пожалуйста, скажите мне, как получить этот номер. Объект Адвокат (1494) -----> 1494

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Django использует метод __str__(), определенный в экземпляре модели, всякий раз, когда ему необходимо представить экземпляр модели в виде строки:

class User(models.Model):
    # ... your fields

    def __str__(self):
        return "%d" % self.user_idx.pk

__unicode__() работает только в том случае, если выне работает Django на Python3.

0 голосов
/ 18 марта 2019

переопределить __unicode__, чтобы изменить то, что django отображает для вашего объекта модели => этот метод работает для python2, а не python3

переопределить __str__, чтобы изменить то, что django отображает для вашего объекта модели

class User(models.Model):

    user_idx = models.OneToOneField(Counsel, primary_key=True, 
    db_column="user_idx", related_name="useridx" , on_delete="models.DO_NOTHING")
    district_id = models.IntegerField(blank=True, null=True)
    user_email = models.CharField(unique=True, max_length=200)
    user_password = models.CharField(max_length=200)
    user_name = models.CharField(max_length=100)

    def __str__(self):
        return "%d" % self.user_idx.id  # id is field of Counsel object you want to show

В вашем случае, если вы хотите изменить то, что представляет собой Counsel объект, вы должны изменить эту модель на эту:

class Counsel(models.Model):
    counsel_idx = models.AutoField(primary_key=True)
    category_sub_idx = models.IntegerField(blank=True, null=True)
    user_idx = models.IntegerField()
    counsel_title = models.CharField(max_length=255)
    counsel_contents = models.TextField()
    counsel_status = models.CharField(max_length=1, choices=COUNSEL_STATUS)
    answer_count = models.IntegerField()
    hit = models.IntegerField()
    user_ip = models.CharField(max_length=20, blank=True, null=True)
    register_date = models.DateTimeField()
    update_date = models.DateTimeField()
    deleted = models.CharField(max_length=1, choices=DELETE_STATUS)

    def __str__(self):
        return "%d" % self.user_idx
...