Виджет Select2 отображается на сайте Django Admin, но не отображается на шаблоне формы в Django4
У меня есть две объектные модели, NewsObject и StockObject. Объект stock является внешним ключом в объекте news.
class stockObject(models.Model):
stock_name = CharField(max_length=100, blank=True, null=True)
stock_tag = CharField(max_length=100, blank=True, null=True)
def __str__(self):
return self.stock_name
class newsObject(models.Model):
title = CharField(max_length=100, blank=True, null=True)
body = TextField(blank=True, null=True)
stock = ForeignKey(stockObject, on_delete=models.SET_NULL, blank=True, null=True)
Я использовал свойство autocomplete_fields в классе ModelAdmin, так как мне нужен выпадающий список акций в новостях с возможностью поиска. Я также добавил search_fields в модель ModelAdmin для акций, как указано в документации.
Вот как выглядит мой файл admin.py:
class stockAdmin(admin.ModelAdmin):
list_display = ['stock_name', 'stock_tag']
search_fields = ['stock_name']
class newsAdmin(admin.ModelAdmin):
list_display = ['title', 'body', 'stock']
search_fields = ['title', 'body', 'stock']
autocomplete_fields = ['stock']
Теперь проблема в том, что я получаю выпадающий список на сайте Django Admin для этого поля, но это только выпадающий список (без возможности поиска) на реальном экране шаблона. У меня есть базовое представление, которое вызывает шаблон, примерно так:
Views.py
def createNews(request):
form = NewsForm()
if request.method == 'POST':
form = NewsForm(request.POST)
if form.is_valid():
form.save()
return redirect('/backoffice/')
context = {'form' : form}
return render(request, 'NewsForm.html', context)
А NewsForm.html это:
{% extends "base.html" %}
{% load static %}
{% block content %}
<form action="" method="POST">
{% csrf_token %}
{{ form }}
<input type="submit" name="Submit">
</form>
{% endblock %}
Я задавался вопросом, что может быть причиной такого поведения. Пробовал множество вещей, но ни одна из них не работает. Что я могу упустить?
Изображение сайта администратора Django
Я думаю, что вы написали все ваши модели в camelCase, поэтому сначала измените их на PascalCase.
Второе, вы пропустили models во всех ваших моделях:
Запишите их следующим образом: добавьте models перед каждым типом данных, например:
from django.db import models
class Musician(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
instrument = models.CharField(max_length=100)
Не только datatype полей.
