Вложенные формы Django для внешних ключей
У меня есть следующие модели Django:
class Color(models.Model):
label = models.CharField(max_length=255, unique=True)
class ColorAnnotation(models.Model):
color = models.ForeignKey(Color)
confidence = models.FloatField()
def __str__(self):
return f"{self.color.label} {round(self.confidence, 2) if self.confidence else None}"
class Annotation(models.Model):
color = models.ForeignKey(ColorAnnotation)
Поскольку у меня много записей, Django Admin стал очень медленным при загрузке одной записи модели Annotation, потому что он пытался загрузить все возможные значения __str__ для ColorAnnotation. Я оптимизировал, используя prefetch_related и select_related, но это не помогло.
Я решил эту проблему, создав пользовательские froms.ModelForm:
class AnnotationForm(forms.ModelForm):
color = forms.ChoiceField(required=False, choices=Color.objects.values_list('id', 'label'))
class Meta:
model = Annotation
fields = '__all__'
class AnnotationAdmin(admin.ModelAdmin):
list_display = ("id", "color")
list_filter = (
("color__color__label", custom_titled_filter('Color'))
)
form = AnnotationForm
def get_queryset(self, request):
queryset = super().get_queryset(request)
return queryset.prefetch_related(
'color__color',
).select_related(
'color',
).all()
Это работает хорошо, но не показывает атрибут confidence экземпляра ColorAnnotation данного Annotation:
Я хотел бы изменить это так, чтобы у меня было выпадающее меню для Color, но с возможностью изменения confidence тоже.
Мне интересно, есть ли способ создать пользовательскую форму forms.ModelForm для модели ColorAnnotation и использовать ее как вложенную форму в AnnotationForm.
