Forms.Select(attrs={'class': 'form-control' Редактирование формы и получение чисел 1-5 в выпадающем списке

Интересно, как я могу получить этот html код в forms.py в моем ReviewForm в качестве виджетов.

Этот код: 'rating': forms.Select(attrs={'class': 'form-control',}), Должен быть как html код под цифрами 1-5. А также сохраняться в моделях, чтобы рейтинг сохранялся при редактировании.

Так что в основном разрешите forms.py при редактировании выводить выпадающий список с 1-5 на данный момент это просто выпадающий список без чисел не могу понять как получить числа в выпадающем списке с помощью виджета.

<div>
                        <label>Rating</label><br>
                        <select class="form-control" name="rating">
                            <option value="1">1</option>
                            <option value="2">2</option>
                            <option value="3" selected>3</option>
                            <option value="4">4</option>
                            <option value="5">5</option>
                        </select>
                    </div>

forms.py

class ReviewForm(forms.ModelForm):
    class Meta:
        model = Review
        fields = ('content', 'rating')
        widgets = {
            'content': forms.Textarea(attrs={'class': 'form-control'}),
            'rating': forms.Select(attrs={'class': 'form-control',}),
        }

Models.py

class Product(models.Model):
    category = models.ForeignKey('Category', null=True, blank=True, on_delete=models.SET_NULL)
    sku = models.CharField(max_length=254, null=True, blank=True)
    name = models.CharField(max_length=254)
    description = models.TextField()
    has_sizes = models.BooleanField(default=False, null=True, blank=True)
    price = models.DecimalField(max_digits=6, decimal_places=2)
    rating = models.DecimalField(max_digits=6, decimal_places=2, null=True, blank=True)
    image_url = models.URLField(max_length=1024, null=True, blank=True)
    image = models.ImageField(null=True, blank=True)

    def __str__(self):
        return self.name

    def get_rating(self):
        reviews_total = 0

        for review in self.reviews.all():
            reviews_total += review.rating

        if reviews_total > 0:
            return reviews_total / self.reviews.count()

        return 0


class Review(models.Model):
    product = models.ForeignKey(Product, related_name='reviews', on_delete=models.CASCADE)
    rating = models.IntegerField(default=3)
    content = models.TextField()
    created_by = models.ForeignKey(User, related_name='reviews', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    def __str__(self):
        return '%s - %s' % (self.product.name, self.created_by)

Я понял как это исправить код ниже:

class Review(models.Model):
    product = models.ForeignKey(Product, related_name='reviews', on_delete=models.CASCADE)
    rating = models.IntegerField(default=3)
    content = models.TextField()
    created_by = models.ForeignKey(User, related_name='reviews', on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    RATINGS = (('1 ',1),('2 ',2),
          ('3 ',3),('4 ',4),('5 ',5))
    rating = models.CharField(max_length=7,choices= RATINGS)

    def __str__(self):
        return '%s - %s' % (self.product.name, self.created_by)

forms.py

class ReviewForm(forms.ModelForm):
    class Meta:
        model = Review
        fields = ('content', 'rating')
        widgets = {
            'content': forms.Textarea(attrs={'class': 'form-control'}),
            'rating': forms.Select(attrs={'class': 'form-control'}),
        }
Вернуться на верх