WedX - журнал о программировании и компьютерных науках

list_display модели с внешним ключом

У меня есть следующая модель django. В модели администратора django таблицы TestCase в ее list_display я хочу отобразить самый последний комментарий и имя модификатора таблицы Remark.

models.py

from django.db import models

class Release(models.Model):
    title        = models.CharField(max_length=128)
    start_time   = models.DateField('Release Start Date')
    release_date = models.DateField('Release Ended Date')

    def __str__(self):
        return self.title

class TestCase(models.Model):
    query       = models.CharField(max_length=256)
    ksq_id      = models.IntegerField()
    status      = models.CharField(max_length=64)
    release     = models.ForeignKey(Release) # Release can have many test cases

    def __str__(self):
        return self.query

class Remark(models.Model):
    owner       = models.CharField(max_length=64)
    module      = models.CharField(max_length=64)
    comment     = models.CharField(max_length=1024)
    modified_ts = models.DateTimeField('date modified', auto_now=True)
    modifier    = models.CharField(max_length=64)
    testcase    = models.ForeignKey(TestCase) # Testcase can have many Re

admin.py

from django.contrib import admin
from kramer_release.models import Release, TestCase, Remark

class RemarksInline(admin.TabularInline):
    model = Remark
    extra = 0 

class RemarkAdmin(admin.ModelAdmin):
    list_display = ('owner', 'module', 'testcase_query')

    def testcase_query(self, obj):
        return obj.testcase.query

class TestCaseAdmin(admin.ModelAdmin):
    inlines = [RemarksInline]
    list_display = ('query', 'status')

admin.site.register(Release)
admin.site.register(TestCase, TestCaseAdmin)
admin.site.register(Remark, RemarkAdmin)
06.12.2013

Ответы:


1

Вы можете определить функцию для получения последнего комментария как часть вашего класса администратора, например:

class TestCaseAdmin(admin.ModelAdmin):
    inlines = [RemarksInline]
    list_display = ('query', 'status', 'latest_comment')

    def latest_comment(self, obj):
        remarks = Remark.objects.filter(testcase=obj).order_by('-modified_ts')
        if remarks:
            return '%s - %s' % (remarks[0].comment, remarks[0].modifier)
        return None

см. документы

06.12.2013
  • Спасибо за Ваш ответ. Мне нужно, чтобы комментарий и модификатор были двумя разными полями. Я могу расширить ваш код до двух функций. Не является ли эта операция дорогостоящей, поскольку она будет выполнять два запроса при рендеринге каждой строки? Есть ли другой простой или элегантный способ? 06.12.2013
  • ах хорошо, да определенно дорого, особенно. когда у вас много строк. 06.12.2013
  • Этот запрос можно более кратко выразить как obj.remark_set.latest('modified_ts'), хотя это не поможет с несколькими запросами. Я не уверен, что с этим можно что-то сделать. Выполнение нескольких столбцов без повторения запроса в двух разных функциях сложно, вам, вероятно, придется переопределить шаблон администратора. 06.12.2013
  • Есть ли какая-то проблема в моей схеме модели, которая делает это сложным? Мой вариант использования выглядит как обычная проблема. 06.12.2013
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]