Как отобразить данные в наборе форм модели для внешнего ключа к полю manytomanyfield как текст только для чтения с предварительно заполненными данными, которые проходят валидацию?
У меня проблема с отображением данных в форме в виде текста, доступного для чтения. Моя модель:
class SalesPlan(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.RESTRICT)
date = models.DateField(null=True, blank=True)
product = models.ForeignKey(Product, on_delete=models.RESTRICT)
quantity = models.FloatField(default=0)
Моя форма:
class SalesPlanForm(forms.ModelForm):
# product = forms.CharField(widget=forms.TextInput(attrs={'readonly':'readonly'}))
class Meta:
model = SalesPlan
fields = '__all__'
widgets = {
'customer': forms.HiddenInput(),
'date': forms.HiddenInput(),
}
Форма заполнена исходными данными, и это прекрасно работает для ввода и сохранения набора форм. Проблема в том, что пользователи могут менять продукт, так как это выпадающий список их портфолио, и я хочу изменить это поведение.
Класс клиента:
class Customer(models.Model):
code = models.CharField(max_length=6, primary_key=True, unique=True)
name = models.CharField(max_length=100)
belongs_to_sales_channel = models.ForeignKey(SalesChannel, on_delete=models.RESTRICT)
portfolio = models.ManyToManyField(Product)
date_created = models.DateTimeField(auto_now_add=True, null=True)
Если я не комментирую продукт в SalesPlanForm, я отображаю правильные данные, но форма не сохраняется с ошибкой:
ValueError at /sales/create/100022/2028/1/1/
Cannot assign "'product_1'": "SalesPlan.product" must be a "Product" instance.
Обратите внимание на двойные кавычки и одинарные кавычки для переменной. Если я назначу виджет для 'product' в dict в Meta, я могу сохранить форму, но данные, отображаемые в форме, будут просто 1, 2, 3, 4 для каждой формы в наборе форм вместо имени объекта product.
Есть ли способ заставить его отображать правильное название продукта (имя объекта, определяемое str в классе Product) вместо 1, 2 и так далее? Я не смог найти эквивалентную проблему здесь, хотя я прочитал много похожих проблем, одна из которых дала мне закомментированную строку в SalesPlanForm heh.
Спасибо.