Модели Django и администратор Django

#django #django-models

#django #django-модели

Вопрос:

У меня есть модель под названием Circuit, там у меня есть поле «name».

И тогда у меня есть другая модель под названием CircuitHistoric с внешним ключом, указывающим на схему, и двумя датами.

Затем в admin.py У меня есть CircuitAdmin, и я хочу отобразить даты из CircuitHistoric с помощью свойства list_display .

Я знаю, что мне нужно внутреннее соединение в SQL, но есть ли способ сделать это с помощью Django?

Ответ №1:

Поскольку код CircuitHistoric модели недоступен, я предположу, что два атрибута даты, которые вы хотите получить, называются first_date и second_date .


models.py: Circuit

Чтобы отобразить даты, связанные с вашими Circuit экземплярами, вы можете определить некоторые конкретные методы в Circuit модели.

Чтобы получить первую дату, вы можете объявить этот метод ( self являющийся Circuit экземпляром).:

 def get_first_date(self):
    return self.circuithistoric_set.first().first_date
 

circuithistoric_set является обратным ForeignKey от Circuit до CircuitHistoric .

Если вы объявили a related_name ForeignKey в своем CircuitHistoric , просто используйте это значение вместо circuithistoric_set .

.first() используется для получения первого значения коллекции CircuitHistoric , относящейся к текущему Circuit экземпляру.

Теперь дайте удобному для пользователя имени вашему методу:

 get_first_date.short_description = "Start date"
 

Вы можете, конечно, применить к этому полю определенное форматирование даты.

В этом коде будут отображены даты первого CircuitHistoric найденного связанного экземпляра.


admin.py: CircuitAdmin

И затем в вашем CircuitAdmin классе вы можете вызвать этот метод в display_list атрибуте:

 list_display = [
    'name',
    'get_first_date',
    'get_second_date',
]
 

Теперь перезагрузите свою страницу администратора, и у вас появится новый столбец под названием Start date , в котором будут перечислены все связанные данные с основным Circuit объектом.

Вы найдете более подробную информацию об display_list атрибуте в официальном документе Django


Для вашего следующего вопроса SO, пожалуйста, опубликуйте код вашей модели. Это значительно облегчит чтение и понимание вашего вопроса.

Комментарии:

1. Это то, что я искал, мне ужасно жаль, что я опубликовал вопрос без моделей. В следующий раз я обязательно это сделаю.

Ответ №2:

Попробуйте вот так:

 # models.py

class CircuitHistoric(models.Model):
    date1 = models.DateTimeField()
    date2 = models.DateTimeField()

class Circuit(models.Model):
    name = models.ForeignKey("CircuitHistoric")
 

В admin.py

 # admin.py

class CircuitAdmin(admin.ModelAdmin):
    list_display = ('title', 'get_date1', 'get_date2')

    def get_date1(self, instance):
        return instance.name.date1
    get_date1.short_description = 'Date 1'

    def get_date2(self, instance):
        return instance.name.date2
    get_date2.short_description = 'Date 2'

admin.register(Circuit, CircuitAdmin)