MyModelAdmin должен иметь поля_поиска для автозаполнения_просмотра
У меня 404 в Admin suggest с ошибкой
ApartmentPromotionAdmin must have search_fields for the autocomplete_view.
Мой админ организован следующим образом
from string import Template
from dal import autocomplete
from django import forms
from django.contrib import admin
from django.contrib.admin.widgets import AutocompleteSelect
from django.forms import widgets
class ApartmentAdmin(admin.ModelAdmin):
form = ApartmentForm
list_display = ("id", "address", "apartment_number", "owner")
search_fields = ["id", "address"]
autocomplete_fields = ["owner"]
class PromotionApartmentForm(forms.ModelForm):
class Meta:
fields = "__all__"
widgets = {
"apartment":
AutocompleteSelect(
ApartmentPromotion._meta.get_field("apartment").remote_field,
admin.site,
attrs={"style": "width: 400px"}, # You can put any width you want.
),
}
class ApartmentPromotionAdmin(admin.ModelAdmin):
form = PromotionApartmentForm
list_display = ("id", "apartment")
autocomplete_fields = ["apartment"]
У меня есть
admin.site.register(ApartmentPromotion, ApartmentPromotionAdmin)
и модели являются
class ApartmentPromotion(models.Model):
apartment = models.ForeignKey(Apartment, on_delete=models.CASCADE, related_name="promotions")
...
def __str__(self):
return f"<{self.id}> {self.apartment} {self.status}"
class Meta:
indexes = [
models.Index(fields=["id"]),
models.Index(fields=["apartment_id"]),
]
class Apartment(models.Model):
owner = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, related_name="owned_apartments")
....
class Meta:
indexes = [
models.Index(fields=["owner_id"]),
]
не могли бы вы помочь мне решить проблему?
Я нашел решение здесь https://code.djangoproject.com/ticket/32619
Проблема решена. Причина была прослежена до эволюции
BaseModelAdmin.formfield_for_foreignkey method: if db_field.name in self.get_autocomplete_fields(request): kwargs['widget'] = AutocompleteSelect(db_field.remote_field, self.admin_site, using=db)
В моем случае я должен изменить
ApartmentPromotion._meta.get_field("apartment").remote_field,
to
ApartmentPromotion._meta.get_field("apartment"),