Bonjour !
Je suis en train d’apprendre à utiliser Django. Je réalise donc un petit projet pour m’entraîner, mais je rencontre un problème avec les formulaire.
J’ai une table "order" qui contient un champs "date_update" qui ne peut pas être à NULL.
J’ai aussi un formulaire qui permet de créer un Order. Dans ce formulaire, je ne souhaite pas que l’utilisateur puisse renseigner la date d’update. J’ai donc caché ce champs. Mais du coup, il est toujours égal à NULL, ce qui me cause une erreur lors de l’enregistrement dans la base de données.
Voici mon code :
models.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | from django.db import models class Vehicle(models.Model): name = models.CharField(max_length=255) class Meta: verbose_name_plural = "Vehicles" def __str__(self): return self.name class Category(models.Model): name = models.CharField(max_length=255) class Meta: verbose_name_plural = "Categories" def __str__(self): return self.name class Status(models.Model): name = models.CharField(max_length=255) color = models.CharField(max_length=255) class Meta: verbose_name_plural = "Satutes" def __str__(self): return self.name class Order(models.Model): vehicle = models.ForeignKey(Vehicle, on_delete=models.DO_NOTHING) category = models.ForeignKey(Category, on_delete=models.DO_NOTHING) description = models.CharField(max_length=255) quantity = models.IntegerField() price = models.FloatField(blank=True, null=True) provider = models.CharField(blank=True, null=True, max_length=255) user_comment = models.CharField(blank=True, null=True, max_length=255) admin_comment = models.CharField(editable=False, max_length=255) user = models.CharField(editable=False, max_length=255) status = models.ForeignKey(Status, editable=False, on_delete=models.DO_NOTHING) date_update = models.DateTimeField(editable=False) class Meta: verbose_name_plural = "Orders" def __str__(self): return self.description ` |
forms.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from django import forms from datetime import datetime from .models import Vehicle, Category, Order class OrderForm(forms.ModelForm): class Meta: model = Order fields = '__all__' def __init__(self, *args, **kwargs): super(OrderForm, self).__init__(*args, **kwargs) for visible in self.visible_fields(): visible.field.widget.attrs['class'] = 'form-control' |
views.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | from django.shortcuts import render, redirect from datetime import datetime from .models import Order from .forms import OrderForm def index(request): orders = Order.objects.order_by('-date_update').all() return render(request, 'order/index.html', { 'orders':orders, }) def add(request): if request.method == 'POST': form = OrderForm(request.POST, initial={'date_update':datetime.now()}) if form.is_valid(): form.save() return redirect('order_index') else: form = OrderForm(initial={'date_update':datetime.now()}) return render(request, 'order/add.html', { 'form':form, }) ` |
order/add.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | {% extends 'layout.html' %} {% block css %} {% endblock %} {% block body %} <a href="{% url 'order_index' %}" class="btn btn-primary">Retour aux commandes</a> <br><br> {{ form.non_field_errors }} <form method="post" action="{% url 'order_add' %}"> {% csrf_token %} {% for field in form %} <div class="form-group"> {{ field.label_tag }} {{ field }} </div> {% endfor %} <input type="submit" name="submit" class="btn btn-primary"> </form> {% endblock %} {% block js %} {% endblock %} |
J’ai donc plusieurs problèmes.
Le premier, c’est que mon date_update est toujours égal à NULL, alors que j’ai bien mit initial={'date_update':datetime.now()
. Je ne sais pas pourquoi.
Ensuite, mes messages d’erreur du formulaire ne s’affichent pas. Je ne sais pas comment faire.
Pouvez-vous m’aider ?
Merci !