Search code examples
pythonhtmldjangorendering

How can I make Django render in the browser?


I'm trying to utilize Django forms.ModelForm function. However, I can not get it to render in the browser (Firefox and Chrome tested). In both browser inspection of code, the table\form does not show and there is no error coming from Django at all. The only thing that shows from the html file is the "Save button" Is there something I am missing here?

In Models.py

from django.db import models


class Product_sell_create(models.Model):
    product_product_sell = models.CharField(max_length=120)
    product_price_sell = models.DecimalField(decimal_places=2, max_digits=500)
    product_volume_sell = models.DecimalField(decimal_places=2, max_digits=500)
    product_location_sell = models.CharField(max_length=120)
    product_description_sell = models.TextField(blank=False, null=False)

Forms.py

from django import forms
from .models import Product_sell_create

class ProductName(forms.ModelForm):
    class Meta:
        model = Product_sell_create
        fields = [
            'product_product_sell',
            'product_volume_sell',
            'product_price_sell',
            'product_location_sell',
            'product_description_sell'
        ]

Views.py

from django.shortcuts import render
from .forms import ProductName


def products_create_view(request):
    form = ProductName(request.POST or None)
    if form.is_valid():
        form.save()
        form = ProductName()

    context = {
        'form': form
    }

    return render(request, "sell.html", context)

sell.html

{% include 'navbar.html' %}
<h1> Upper test</h1>

<form>
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save" />
</form>

<h1> TEST </h1>

{% block content %}
{% endblock %}

Solution

  • just did it, you would have problems POSTing your object too:

    views.py:

    from django.shortcuts import render, redirect
    from .forms import ProductName
    from .models import Product_sell_create
    
    def products_create_view(request):
        if request.method == 'POST':
            form = ProductName(request.POST)
            if form.is_valid():
                prod = form.save(commit=False)
                prod.save()
                return redirect('../thanks')
        else:
            form = ProductName()
    
            context = {
                'form': form
            }
    
            return render(request, "form_test.html", context)
    
    
    def thanks_view(request):
        query = Product_sell_create.objects.all()
        return render (request, 'thanks.html', {'query' : query})
    

    forms.py and models.py keeps the same

    sell.html:

    <h1> Upper test</h1>
    
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Save" />
    </form>
    
    <h1> TEST2 </h1>
    

    thanks.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <h1>{{ query }}</h1>
        <h2>THANKS</h2>
    </body>
    </html>
    

    enter image description here