Issue
I’m creating a simple app for doing product reviews.
I have a Product, Manufacturer and Review model, which I put together
class Manufacturer (models.Model):
Name = models.CharField()
Class Products (models.Model):
Name = models.CharField()
manufacturer=model.ForeignKey(manufacturer)
Class review (models.Model):
Title = CharField()
product = models.ForeignKey(product)
I created a ModelForm to create a review.
So far you’ve only been able to create custom widgets using overridden templates.
class CustomSelectWidget(forms.widgets.Select):
option_template_name = 'widgets/select_option.html'
Class NewReviewForm(forms.ModelForm):
review = Form.ModelMultipleChoiceField(
queryset = Review.objects.none(),
Widget = CustomSelectWidget(),
)
class meta:
model = review
field = '__all__'
Form views are regular function-based views.
The review field is rendered with the list of products inside the
What I have now
- Geforce RTX2080
- MAXSUN AMD Radeon RX 550
- Arca 770
goals
- NVIDIA-Geforce RTX2080
- AMD – MAXSUN Radeon RX 550
- Intel – Arca 770
Solution
You can override create_option
in the widget:
class CustomSelectWidget(forms.widgets.Select):
option_template_name = 'widgets/select_option.html'
def create_option(self, name, value, label, selected, index, subindex=None, attrs=None):
label = f"{value.instance.product.name} {value.instance.title}"
return super().create_option(name, value, label, selected, index, subindex, attrs)
Answered By – Lucas Grugru
Answer Checked By – Timothy Miller (Easybugfix Admin)