Я не уверен на 100%, что вы пытаетесь сделать, но похоже, что вы хотите добавить пользовательский вид к стандартному администратору django для конкретной модели. Если это так, вы можете оставить AdminSite
в покое, вам, вероятно, вообще не нужно это настраивать. Я немного перестроил ваш код, превратив его в нечто большее, чем нужно. Я не все исправил, потому что я не уверен, что именно вы хотите, поэтому не копируйте и не вставляйте это, но я объясню соответствующие биты, которые, мы надеемся, укажут вам правильное направление.
Вам не нужно ничего добавлять в свои приложения в settings.py
. Администратор django.contrib.admin
и, надеюсь, ваше приложение мы уже перечислили (в противном случае вам нужно будет сначала добавить это, а затем добавить свои модели, прежде чем подумать о добавлении интерфейса администратора для них).
class TemplateAdmin(admin.ModelAdmin):
change_form_template = ‘admin/test_attempt.html’ # 1
def get_urls(self): # 2
urls = super().get_urls()
admin_site = self.admin_site
custom_urls = [
path(
r’^(?P<object_id>\d+)/test/$’,
self.admin_view(self.preview), # 3
name="preview"),
]
return urls + custom_urls
def preview(self, request, object_id): # 4
context = {}
context = {
**self.each_context(request),
'title': self.index_title,
# Unable to get this app_list as well
# 'app_list': app_list,
}
request.current_app = self.name
#load_template = request.path.split('/')[-1]
#template = loader.get_template('admin/' + load_template)
template = loader.get_template('admin/test_attempt.html') # 4
return HttpResponse(template.render(context, request))
admin.site.register(Template, TemplateAdmin) # 5
# 1
Это шаблон, который будет использоваться при нажатии для проверки или изменения (или добавления в этом отношении) конкретного экземпляра модели, которая у вас есть. Если у вас будет ссылка на ваш новый вид, вам нужно будет изменить этот шаблон и добавить ссылку на любой URL, который вы определите в # 3
. Кстати, если все, что вы хотите сделать, это настроить это представление, вы можете игнорировать все остальное, все, что вам нужно сделать, это добавить то, что вам нужно, к этому шаблону.
# 2
Вы должны понять, почему мы должны использовать get_urls
. Обычно, чтобы вернуть конкретное представление, вы устанавливаете в urls.py
что-то, что будет указывать на конкретное представление, которое у вас есть (обычно определяется где-то вроде views.py
). Однако мы хотим добавить представление admin
, и все URL, начинающиеся с admin/...
, рассматриваются внутри приложения администратора. Чтобы обойти это, django предоставляет нам метод get_urls
в ModelAdmin
, поэтому мы можем добавить дополнительные представления.
# 3
self.admin_view()
просто добавляет некоторые дополнительные логи c об авторизации, чтобы нам не пришлось об этом беспокоиться. Обратите внимание, что в строке выше нам нужно добавить только конечную часть URL, поэтому полный URL будет admin / app / model // test
# 4
Здесь мы определяем ваше дополнительное представление, имеет смысл добавить представление как метод этого ModelAdmin, так как оно напрямую связано с ним.
# 5
В учебном пособии, которому вы следовали, у автора должна быть какая-то модель с именем Template
(что, возможно, является довольно запутанным названием для модели), и вам нужно заменить Template
с любой моделью, для которой вы делаете это представление). Также имеет смысл переименовать TemplateAdmin
в нечто более подходящее (если ваша модель называется Car
, назовите ее CarAdmin
).
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ : По ссылке, которую вы добавили в комментарии ниже, я полагаю, вы пытаетесь выполнить задачи, изложенные здесь: https://github.com/ganeshkbhat/pr/blob/master/admintmpl/admin.py. А именно:
# TASK:
# need custom admin template inside admin that shows
# all questions assigned to user
# filter option sort by user
# TASK:
# Create test template which shows inside admin
# 1. question
# - INLINE options - 2 answers (4 options max)
# 2. question
# - INLINE options - 2 answers (4 options max)
# Submit
# On submit save to QuestionsAnswered
Все эти задачи могут быть выполнены без какого-либо особенного подхода, определенно не того, что необходимо в учебном пособии, которому вы следовали. Я не собираюсь отвечать на все это здесь, потому что это выходит за рамки того, что задает этот вопрос. Но я бы посоветовал вам взглянуть на django документы здесь: https://docs.djangoproject.com/en/dev/ref/contrib/admin/ Они дают объяснение, как делать все, что вам нужно.