У меня есть 2 модели продукта и категории с - ManyToMany Relation Product-Category и self ForeignKey для категории
class Category(models.Model):
parent = models.ForeignKey('self', blank=True, null=True, verbose_name='parent category', on_delete=models.CASCADE)
class Product(models.Model):
categories = models.ManyToManyField(Category)
name = models.CharField(max_length=255)
и форму создания продукта:
class ProductModelForm(ModelForm):
class Meta:
model = Product
fields = ['categories', 'name', 'short_description', 'description']
widgets = {
'categories': MyWidget,
}
По умолчанию ManyToMany становится ModelMultipleChoiceField и соответствует SelectMultiple Widget.
Я создаю новый виджет, наследуемый от SelectMultiple.
Моя проблема в том, что во всех виджетах по умолчанию Django отправляет из записи только значение, определенное внутри def __str__
в модели. В случае Select также pk.
(None, [{'name': 'categories', 'value': 7, 'label': 'Category 2', 'selected': True, 'index': '1', 'attrs': {'selected': True}, 'type': 'select', 'template_name': 'django/forms/widgets/select_option.html'}]
Мне нужно иметь в виджете и другую информацию, такую как родительское значение.
Конечно, я могу сделать еще один запрос и получить данные из базы данных, но это означает, что у меня есть 2 запроса, один я и один Джанго.
Есть ли способ заставить Django отправлять все данные записи в виджет, а не только то, что было определено в __str__
?
Изменение __str__
не вариант, потому что он используется и в других местах и в админке.