forms.py
ns = random.sample(range(15,83), 9)
def decide_coice(count, CHOICE_dict):
CHOICEs = {
(ns[count*3], CHOICE_dict[ns[count*3]]),
(ns[count*3+1], CHOICE_dict[ns[count*3+1]]),
(ns[count*3+2], CHOICE_dict[ns[count*3+2]])
}
return CHOICEs
CHOICESAKE = {
(1,'1'),
(2,'2'),
(3,'3'),
}
CHOICE_dict = {
15:'Type de salade',
16:'Bâtonnet de légumes',
(Abréviation)
82: 'Glace aux fruits',
}
CHOICE = {
(15,'Type de salade'),
(Omis)
(82, 'Glace aux fruits'),
}
class RadioForm(forms.Form):
select = forms.ChoiceField(label='Alcool', widget=forms.RadioSelect, choices= CHOICESAKE, initial=2)
select2 = forms.ChoiceField(label='Attribut 2', widget=forms.RadioSelect, choices= decide_coice(0, CHOICE_dict), initial=15)
select3 = forms.ChoiceField(label='Attribut 3', widget=forms.RadioSelect, choices= decide_coice(1, CHOICE_dict), initial=15)
select4 = forms.ChoiceField(label='Attribut 4', widget=forms.RadioSelect, choices= decide_coice(2,CHOICE_dict), initial=15)
Écrivez le processus de réception des entrées dans des formulaires. CHICE et CHICE_dict sont destinés à faciliter le traitement. Il y a toujours moyen de bien le gérer avec un seul. Puisque le processus de classification de la liqueur n'est pas encore terminé à partir de l'image, la valeur de la liqueur est donnée par CHOICE SAKE. Je veux donner le nombre de saké ici.
Un nombre aléatoire est généré et le bouton correspondant à ce nombre est affiché sous forme de quiz.
frontend/views.py
def new(request):
params = {'message': '', 'form': None}
if request.method == 'POST':
#form = QuizForm(request.POST)
form = RadioForm(request.POST)
if form.is_valid():
"""
redirect_url = '/newview'
form = urlencode(QuizForm(request.POST))
url = f'{redirect_url}?{form}'
return redirect(url)
"""
key = (int(form.data['select']), int(form.data['select2']), int(form.data['select3']), int(form.data['select4']))
return recommend(request, key[0], key[1], key[2], key[3])
else:
params['message'] = 'Veuillez saisir à nouveau'
params['form'] = form
else:
params['form'] = RadioForm()
return render(request, 'frontend/new.html', params)
Il a créé une page pour un quiz, mais je ne supportais pas d'y toucher, alors j'ai créé un quiz avec du nouveau.
form = RadioForm (request.POST) '' et
form '' contient le résultat du quiz avec Queryset type.
Si la valeur est normale lors de l'envoi du quiz, appuyez sur `` return recommend (request, key [0], key [1], key [2], key [3]) '' pour passer au processus suivant.
J'ai un problème
Je voulais vraiment aller sur ** frontend / recommend ** et afficher le résultat, mais je ne savais pas comment passer des données json.
Il semble que les deux peuvent être réalisés, alors j'ai choisi le second. Par conséquent, le traitement est toujours effectué à l'URL de _ / new_. J'ai également implémenté le troisième.
Tous les arguments sont int, et ce nombre sort en premier et correspond au nombre CHOICE.
retour recommandé (demande, numéro d'alcool, collation numéro 1, collation numéro 2, collation numéro 3)
Le flux de traitement est le suivant
findameperson ()
views.py
quizAnser = [CHOICE_dict[one+3], CHOICE_dict[two], CHOICE_dict[three], CHOICE_dict[four]]
#Cibler les données obtenues à partir d'images et de quiz
target_sake = target_items_list[one+3]
first_otsumami = {target_items_list[two] : two}
second_otsumami = {target_items_list[three] : three}
target_data = [first_otsumami, second_otsumami]
sample_lists = list(Sample.objects.all().values())
#Obtenez des exemples de données de personnes ayant une évaluation élevée du saké sélectionné
samePersonList = findsamePerson(target_sake, sample_lists)
#Calculer la similitude
similarities = get_similarities(samePersonList, target_data)
#Classement
ranking = predict(samePersonList, similarities, target_items_list, CHOICE_dict)
params = {
'title': 'title',
'massage': similarities,
'Type d'alcool':quizAnser[0],
'Collation 1':quizAnser[1],
'Collation 2':quizAnser[2],
'Collation 3':quizAnser[3],
'Première place':ranking[0][0],
'quizAnser': quizAnser,
'data': ranking,
}
return render(request, 'frontend/recommend.html', context=params)
def findsamePerson(target_sake, sample_lists):#(str, list[dict])
#Extraire des échantillons avec une cote d'alcool cible de 5
#Mettre les données (type dictionnaire) des personnes ayant une évaluation élevée dans la même liste
samePersonList = []
for item in sample_lists:
if item[target_sake] >= 3:
samePersonList.append(item)
else:
pass
return samePersonList
vies.py
params = {
'title': 'title',
'massage': similarities,
'Type d'alcool':quizAnser[0],#str
'Collation 1':quizAnser[1],#str
'Collation 2':quizAnser[2],
'Collation 3':quizAnser[3],
'Première place':ranking[0][0],#str
'quizAnser': quizAnser,#Liste des noms de résultats d'entrée(str)[Saké, Otsu 1, Otsu 2, Otsu 3]
'data': ranking,#liste de dict=[{Nom de la collation 1:Degré de similitude},{Nom de la collation 2:Degré de similitude}...]Degré de similitudeでソート済み
}
return render(request, 'frontend/recommend.html', context=params)
La clé (à gauche) des paramètres est l'étiquette qui peut être utilisée en html, et la valeur (à droite) est le contenu réel
frontend/recommend.html
<h2>Votre collation aujourd'hui est ...</h2>
<img src="{% static 'frontend/img/result/salad.jpg' %}">
<h2>{{Première place}}!!!</h2>
<br>
<p>{{Type d'alcool}}Parfait pour{{Première place}}est.<br>
<br>
En plus des salades, les ingrédients suivants sont également recommandés.<br>
Si vous n'êtes pas doué pour les salades ou si vous souhaitez manger d'autres collations, veuillez vous y référer.</p>
</div>
{% for item, similarities in data %}
<p>
{{forloop.counter}}Rang:{{item}}【point】: {{similarities}}
</p>
{% endfor %}
Vous pouvez afficher la valeur des paramètres avec {{key}}, et vous pouvez utiliser la fonction python avec {%%}, donc vous faites une boucle.
↓ Écran de sortie
C'est une tâche infernale de taper manuellement. Actuellement, seulement 20 environ peuvent être enregistrés Je vais le faire en regardant un film
Je vais manger des ramen. S'il y a des choses étranges ou des améliorations, veuillez demander sur Slack! J'ai du temps demain!
Comment rediriger en utilisant Django et JavaScript (JS) Envoyer et recevoir du JSON avec Django Json sur Django [Django] Installer les boutons radio et formater les balises Redirection en passant des paramètres (https://djangobrothers.com/blogs/django_redirect_with_parameters/) Supprimer la base de données du modèle (ModelChoiceField) Afficher un bouton radio qui fait référence à un autre modèle sur l'écran d'inscription (Django) Je ne comprends pas la logique de la transition d'écran how to convert Querydict to python dict informations de base sur le formulaire Générer un formulaire à partir d'un modèle
Recommended Posts