Один из способов получить аналогичную функциональность (хотя не совсем то, что вы ищете) - добавить новое поле в модель вашего продукта под названием default_image
. У вас есть это поле, установленное как ForeignKey для модели Image (вам нужно будет использовать related_name
, чтобы избежать обратного имени запроса cla sh). Вы используете пользовательскую форму для модели Продукта, которая ограничивает набор запросов поля default_image изображениями, связанными с конкретным продуктом.
В панели администратора у вас появится раскрывающийся список (или переключатель, если Вы используете радио-виджет), чтобы выбрать изображение по умолчанию для этого Продукта. В качестве вариантов будут выбраны изображения, относящиеся к этому продукту, и это позволит вам выбрать одно (и только одно) изображение по умолчанию для определенного продукта.
Я настроил быстрый тест (используя модели из учебника Django , чтобы избежать неверной интерпретации настроек):
models.py:
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
# this field will hold the preferred choice for this question -
# setting one is optional
preferred_choice = models.ForeignKey('Choice', on_delete=models.CASCADE, related_name='preferred_choice')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
admin.py:
from django.contrib import admin
from django import forms
from .models import Question, Choice
# Setup a custom form
class QuestionForm(forms.ModelForm):
class Meta:
model = Question
fields = "__all__"
# call super and then set the queryset of choices to be the ones related to
# the question we are working on
def __init__(self, *args, **kwargs):
super(QuestionForm, self).__init__(*args, **kwargs)
if self.instance:
self.fields['preferred_choice'].queryset = Choice.objects.filter(question=self.instance)
class ChoiceInline(admin.TabularInline):
model = Choice
class QuestionAdmin(admin.ModelAdmin):
form = QuestionForm
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
Другим возможным решением было бы добавить поле логического / флажка в модель изображения с именем «default_image», но вам нужно будет внедрить какой-то пользовательский логик сохранения c для убедитесь, что только в одном изображении установлено значение True
Так оно и было обработано в в этом вопросе , а JS использовался для 1) установки флажков выглядят как переключатели и 2) убедитесь, что для других параметров установлено значение False, если для одного из них установлено значение True
Не идеальные решения, но, надеюсь, это поможет, по крайней мере, указать вам правильное направление ...