J'ai commencé à apprendre Django il y a environ une semaine et je suis tombé sur un mur. J'apprécierais vraiment les Lumières ...
models.py
class data(models.Model):
course = models.CharField(max_length = 250)
def __str__(self):
return self.course
html
Conversion des objets de models.course en schlist
<link rel="stylesheet" type="text/css" href="{% static '/chosen/chosen.css' %}" />
<form action={% views.process %} method="GET">
<div>
<h4 style="font-family:verdana;">First Course: </h4>
<select data-placeholder="Course" style="width:350px;" class="chosen-select" tabindex="7">
<option value=""></option>
{% for item in schlist %}
<option> {{ item }} </option>
{% endfor %}
</select>
</div>
</br>
<div>
<h4 style="font-family:verdana;">Second Course:</h4>
<select data-placeholder="Course" style="width:350px;" class="chosen-select" tabindex="7">
<option value=""></option>
{% for item in schlist %}
<option> {{ item }} </option>
{% endfor %}
</select>
</div>
</br>
<input type="submit" value="Compare!" />
</form>
urls.py (ayant mes doutes si cela fonctionne ..)
urlpatterns = [
url(r'^(\d+)/(\d+)$',views.process, name = 'process'),
]
view.py
def process(request,q1 ,q2):
obj1= get_object_or_404(Schdata, course = q1)
obj2= get_object_or_404(Schdata, course = q2)
........
Je me demandais s'il était possible pour l'action de formulaire de diriger l'action vers
(1) view.py ou (2) url.py (et finalement à view.py) avec 2 arguments sélectionnés?
Dans l'affirmative, comment l'action de formulaire doit-elle être? {{view?}} ou {{url?}}. Suis-je en train de manquer la définition de mes arguments dans mon HTML?
Diriger vers views.py:
L'entrée utilisateur est CharField
, pourrait utiliser get_object_or_404
Pour obtenir le modèle pk. Cependant, lors de la définition de mon urls.py, j'obtiendrais une erreur Noreverse car mes arguments d'URL sont la clé primaire.
Diriger vers urls.py:
Les arguments d'URL sont la clé primaire. De la façon dont je le vois, j'ai besoin de convertir comme par magie mon entrée utilisateur Charfield
en pk avant de la transmettre à urls.py
Existe-t-il une fonction (ou) pour get()
dans django? Par exemple get_object_or_404(pk = q1 or course = q1)
?
J'apprécierais vraiment tout conseil. Je regarde ça depuis des heures.
Vous essayez d'utiliser la résolution inverse des URL dans Django.
Dans votre fichier html, l'URL de l'action de formulaire correcte est la suivante et la méthode doit être POST:
<form action={% url 'process' %} method="POST">
Dans le cas où vous essayez de transmettre des paramètres, utilisez ceci:
<form action={% url 'process' request.user.id 4 %} method="POST">
Référence: https://docs.djangoproject.com/en/1.10/topics/http/urls/
Oui, je suis en retard, mais cela peut aider les autres à mieux comprendre comment Django traite la demande.
Modèle Django 3.0
Comment Django traite la demande
De base:
Lecture détaillée:
Officiel Django Documentations Comment Django traite une requête
Voici vos modèles d'URL:
urlpatterns = [ path('profile/edit/<int:pk>/',views.editprofile, name='editprofile'),]
Le troisième argument dans urlpatterns est pour si vous voulez changer le modèle d'url de courant à ceci:
urlpatterns = [ url('profile/edit/user/id/<int:pk>',views.editprofile, name = 'editprofile'),]
Vous n'avez pas besoin de redéfinir le modèle d'URL dans tous les modèles où vous utilisez le nom de l'URL.
Par exemple:
Ceci est mon modèle profile.html où j'ai utilisé le nom de l'URL au lieu de l'URL codée en dur.
<a class="item" href="{% url 'editprofile' user.id %}" >Edit profile </a>
Solution de votre problème:
. html
Utilisez uniquement le nom de l'URL au lieu de l'URL codée en dur dans vos modèles et passez des arguments.
<form action={% process no_of_arguments %} method="POST">
views.py
Ici vous pouvez traiter votre demande
def process(request,no_of_arguments):
Devenez bon Django
Vous pouvez également utiliser Django ModelForms pour votre modèle. En utilisant des formulaires de modèle ou un formulaire simple, vous pouvez faire plusieurs choses