Django Форма не отображается - PullRequest
0 голосов
/ 21 января 2020

моя Django форма не отображается, другие формы в проекте работают без проблем, я просто потерян

Эта форма должна отображаться в файле шаблона product_review. html, который затем отображается через {% include%} к продуктам. html

Думаю, я должен отметить, что это отдельное Django приложение

Моя модель:

from django.db import models
from django.conf import settings
from ecommerce.models import Item

STAR_CHOICES = (
    ('0','0'),
    ('1','1'),
    ('2','2'),
    ('3','3'),
    ('4','4'),
    ('5','5'),
)

# Create your models here.
class Review(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    title = models.CharField(max_length=40, blank=True, null=True)
    timestamp = models.DateTimeField(auto_now_add=True)
    review_content = models.CharField(max_length=300,blank=True, null=True)
    star_score = models.CharField(choices=STAR_CHOICES, max_length=1)
    item = models.ForeignKey('ecommerce.Item', on_delete=models.CASCADE)

    def __str__(self):
        return self.user.username

Моя форма:

from django import forms
from ecommerce.models import Item
from .models import Review

STAR_CHOICES = (
    ('0','0'),
    ('1','1'),
    ('2','2'),
    ('3','3'),
    ('4','4'),
    ('5','5'),
)

class AddReviewForm(forms.ModelForm):
    title = forms.CharField(required=True)
    star_score = forms.ChoiceField( widget=forms.RadioSelect, choices=STAR_CHOICES)
    review_content = forms.CharField(widget=forms.Textarea(attrs={
        'rows': 4
    })) 
    class Meta:
        model = Review
        fields = '__all__'
        exclude = ['user','timestamp','item']

Мой вид:

from django.shortcuts import render, get_object_or_404
from .models import Review
from .forms import AddReviewForm
from ecommerce.models import Item
from django.shortcuts import redirect


# Create your views here.
def AddProductReviewView(View):
    def post(self, request, *args, **kwargs):
    item = get_object_or_404(Item, slug=slug)
    form = AddReviewForm(self.request.POST or None)
    if request.method == "POST"
        if form.is_valid():
            form.instance.user = request.user
            form.instance.item = item
            form.save()
            return redirect(reverse("ecommerce:product", kwargs={
                'slug':slug
            }))
    context = {
        'form':form
        'item':item
    }
    return render(self.request,'product_review.html')

1 Ответ

0 голосов
/ 21 января 2020

Ваше представление должно быть классом, и оно должно содержать метод get, который включает вашу форму, чтобы он мог отображать ее при первом просмотре страницы;

# Create your views here.
class AddProductReviewView(View):

    def get(self, request, *args, **kwargs):
        context = {
            'form': AddReviewForm()
        }
        return render(self.request, 'product_review.html', context)

    def post(self, request, *args, **kwargs):
        slug = kwargs.get('slug')
        item = get_object_or_404(Item, slug=slug)
        form = AddReviewForm(self.request.POST or None)

        if form.is_valid():
            form.instance.user = request.user
            form.instance.item = item
            form.save()
            return redirect(reverse("ecommerce:product", kwargs={
                'slug': slug
            }))

        context = {
            'form': form
            'item': item
        }
        return render(self.request,'product_review.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...