Python 3.8 django log 10 - Add form and user interaction

Flow



1. edit view.py in meetings

from django.shortcuts import render, get_object_or_404

from .models import Meeting, Room


def detail(request, id):
meeting = get_object_or_404(Meeting, pk=id)
return render(request, "meetings/detail.html", {"meeting": meeting})


def rooms_list(request):
return render(request, "meetings/rooms_list.html",
{"rooms": Room.objects.all()})


def new(request):
return render(request, "meetings/new.html")

2. Add new.html under   meetings


{% extends "base.html" %}

{% block tiile %}New Meeting{% endblock %}

{% block content %}
<h1>Plan an new meeting</h1>
<form>
<table>
{{ form }}
</table>
</form>
{% endblock %}


3. Edit views.py

from django.shortcuts import render, get_object_or_404
from django.forms import modelform_factory

from .models import Meeting, Room


def detail(request, id):
meeting = get_object_or_404(Meeting, pk=id)
return render(request, "meetings/detail.html", {"meeting": meeting})


def rooms_list(request):
return render(request, "meetings/rooms_list.html",
{"rooms": Room.objects.all()})


MeetingForm = modelform_factory(Meeting, exclude=[])


def new(request):
form = MeetingForm()
return render(request, "meetings/new.html", {"form": form})

4. urls.py

from django.urls import path

from .import views


urlpatterns = [
path('<int:id>', views.detail, name="detail"),
path('rooms', views.rooms_list, name="rooms"),
path('new', views.new, name="new")
]

5. Create submit button

{% extends "base.html" %}

{% block tiile %}New Meeting{% endblock %}

{% block content %}
<h1>Plan an new meeting</h1>
<form>
<table>
{{ form }}
</table>
{% csrf_token %}
<button type="submit">Create</button>
</form>
{% endblock %}

6.Change to POST 

new.html 
{% extends "base.html" %}

{% block tiile %}New Meeting{% endblock %}

{% block content %}
<h1>Plan an new meeting</h1>
<form method="post" >
<table>
{{ form }}
</table>
{% csrf_token %}
<button type="submit">Create</button>
</form>
{% endblock %}
views.py
from django.shortcuts import render, get_object_or_404, redirect
from django.forms import modelform_factory

from .models import Meeting, Room


def detail(request, id):
meeting = get_object_or_404(Meeting, pk=id)
return render(request, "meetings/detail.html", {"meeting": meeting})


def rooms_list(request):
return render(request, "meetings/rooms_list.html",
{"rooms": Room.objects.all()})


MeetingForm = modelform_factory(Meeting, exclude=[])


def new(request):
if request.method == "POST":
form = MeetingForm(request.POST)
if form.is_valid():
form.save()
return redirect("welcome")
else:
form = MeetingForm()
return render(request, "meetings/new.html", {"form": form})

7. Add forms.py




forms.py

from datetime import date

from django.forms import ModelForm, DateInput, TimeInput, TextInput, IntegerField
from django.core.exceptions import ValidationError


from .models import Meeting


class MeetingForm(ModelForm):
class Meta:
model = Meeting
fields = "__all__"
widgets = {
'date': DateInput(attrs={"type":"date"}),
'start': TimeInput(attrs={"type":"time"}),
'duration': TextInput(attrs={"type":"number", "min":"1", "max":"4"})
}

def clean_data(self):
d = self.cleaned_data.get("date")
if d < date.today():
raise ValidationError("Meeting cannot be in the past")
return d


views.py
from datetime import date

from django.forms import ModelForm, DateInput, TimeInput, TextInput, IntegerField
from django.core.exceptions import ValidationError


from .models import Meeting


class MeetingForm(ModelForm):
class Meta:
model = Meeting
fields = "__all__"
widgets = {
'date': DateInput(attrs={"type":"date"}),
'start': TimeInput(attrs={"type":"time"}),
'duration': TextInput(attrs={"type":"number", "min":"1", "max":"4"})
}

def clean_data(self):
d = self.clean_data.get("date")
if d < date.today():
raise ValidationError("Meeting cannot be in the past")
return d

new.html

{% extends "base.html" %}

{% block tiile %}New Meeting{% endblock %}

{% block content %}
<h1>Plan an new meeting</h1>
<form method="post" >
<table>
{{ form }}
</table>
{% csrf_token %}
<button type="submit">Create</button>
</form>
{% endblock %}
8. Check web site














留言

這個網誌中的熱門文章

香港袐密行動

要老是忘記, 我更記不起