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