Home > Blockchain >  Django submit form POST not valid
Django submit form POST not valid

Time:05-13

I am attempting to submit a form to populate the database. I can't get the POST working. It doesn't look valid, but I can't figure out what I need to do to correct it.

I have put some debugging on to see what happens when I click submit & the POST gets sent. I can't figure out how to send created_at or created_by. I assume these are the reason why the POST is not valid and the database is not populating.

models.py

from django.db import models
from django.contrib.auth.models import User
from django.forms import ModelForm

class Order(models.Model):
    order_name = models.CharField(max_length=100, unique=True, null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User, related_name='Project_created_by', on_delete=models.DO_NOTHING)

    def __str__(self):
        return self.order_name

class Ce_Base(models.Model):
    ce_hostname = models.CharField(max_length=15)
    new = models.BooleanField()
    location = models.TextField()

    order_reference = models.ManyToManyField(Order)

forms.py

from django.forms import ModelForm
from .models import Order

class OrderForm(ModelForm):
    class Meta:
        model = Order
        fields = ['order_name']

views.py

from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from .models import Order
from .models import Ce_Base
from .forms import OrderForm

@login_required
def home(request):
    form = OrderForm()
    if request.method == 'POST':
        form = OrderForm()
        form.instance.created_by = request.user
        print(request.POST)
        if form.is_valid():
            form.save()
    context = {
        'order': Order.objects.all(),
        'form': form,
    }
    return render(request, 'orchestration/order_create.html', context)

@login_required
def orderprocessing(request):
    context = {
        'ce_base': Ce_Base.objects.all()
    }
    return render(request, 'orchestration/order_processing.html', context)

html

{% extends "orchestration/base.html" %}
{% block content %}
  <h1>Input Form</h1>
    <form action="" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" >
    </form>
  <h1>Orders</h1>
  {% for each_order in order %}
    <p>Order Name: {{ each_order.order_name }}</p>
    <p>Created On: {{ each_order.created_at }}</p>
    <p>Created By: {{ each_order.created_by }}</p>
  {% endfor %}
{% endblock content %}

Here is my terminal output when i hit the submit button

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
May 12, 2022 - 16:15:40
Django version 4.0.2, using settings 'dcn_automation.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
<QueryDict: {'csrfmiddlewaretoken': ['MQVrDwqyT8Y6ARAF9CCyuCSwavz5BAVmi2GdxMgvxFlHmiD1M8Cq6y0VRVummR82'], 'order_name': ['test']}>

CodePudding user response:

If don't pass the data in the form, the validation fails.

form = OrderForm(request.POST)
  • Related