[PYTHON] Fortschritt der Snackempfehlung (Memo)

Was du machen willst

Was ich nicht konnte

Quizformular (Optionsfeld erstellen) + Wählen Sie jedes Mal zufällig die im Quiz angezeigten Snacks aus +

image.png

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:'Salattyp',
    16:'Gemüsestick',
    (Abkürzung)
    82: 'Fruchteis',
}
CHOICE = {
    (15,'Salattyp'),
(Weggelassen)
    (82, 'Fruchteis'),
}

class RadioForm(forms.Form):
    select = forms.ChoiceField(label='Alkohol', 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)


Schreiben Sie den Prozess des Eingangs von Eingaben in Formulare. CHICE und CHICE_dict dienen der Vereinfachung der Verarbeitung. Es gibt immer einen Weg, mit einem gut umzugehen. Da der Flottenklassifizierungsprozess aus dem Bild noch nicht abgeschlossen wurde, wird der Flottenwert von CHOICE SAKE angegeben. Ich möchte hier die Anzahl der Sake angeben.

Eine Zufallszahl wird generiert und der dieser Zahl entsprechende Knopf wird als Quiz angezeigt.

Erhalten Sie Quizergebnisse von der Rezeption

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'] = 'Bitte erneut eingeben'
            params['form'] = form
    else:
        params['form'] = RadioForm()
    return render(request, 'frontend/new.html', params)

Er hat eine Seite für das Quiz erstellt, aber ich konnte es nicht ertragen, sie zu berühren, also habe ich ein neues Quiz erstellt. form = RadioForm (request.POST) und form enthalten das Ergebnis des Quiz mit Queryset type. Wenn der Wert beim Senden des Quiz normal ist, drücken Sie "Empfehlung zurückgeben" (Anfrage, Taste [0], Taste [1], Taste [2], Taste [3]), um zum nächsten Prozess zu gelangen.

Ich habe hier ein Problem

Ich wollte unbedingt zum ** Frontend / Empfehlen ** gehen und das Ergebnis anzeigen, wusste aber nicht, wie ich JSON-Daten weitergeben sollte.

Es scheint, dass die beiden realisiert werden können, also habe ich den zweiten gewählt. Daher erfolgt die Verarbeitung immer unter der URL _ / new_. Ich habe auch den dritten implementiert. Alle Argumente sind int, und diese Nummer kommt zuerst heraus und entspricht der CHOICE-Nummer. Rückgabeempfehlung (Anfrage, Schnapsnummer, Snacknummer 1, Snacknummer 2, Snacknummer 3)

Sagen Sie die Regler anhand der Ergebnisse des Quiz voraus

Der Verarbeitungsablauf ist wie folgt


    1. Abrufen hoch bewerteter Daten für vom Benutzer ausgewählte Spirituose findameperson ()
  1. Berechnen Sie die Ähnlichkeit anhand des vom Benutzer get_simiralities () ausgewählten Reglers
    1. Sortieren Sie nach Ähnlichkeit und Rang "Predict ()"

views.py


quizAnser = [CHOICE_dict[one+3], CHOICE_dict[two], CHOICE_dict[three], CHOICE_dict[four]]

    #Zieldaten aus Bildern und Tests
    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())


    #Erhalten Sie Beispieldaten von Personen mit einer hohen Bewertung des ausgewählten Sake
    samePersonList = findsamePerson(target_sake, sample_lists)

    #Berechnen Sie die Ähnlichkeit
    similarities = get_similarities(samePersonList, target_data)

    #Rangfolge
    ranking = predict(samePersonList, similarities, target_items_list, CHOICE_dict)

    params = {
        'title': 'title',
        'massage': similarities,
        'Art der Flotte':quizAnser[0],
        'Snack 1':quizAnser[1],
        'Snack 2':quizAnser[2],
        'Snack 3':quizAnser[3],
        'Erster Platz':ranking[0][0],
        'quizAnser': quizAnser,
        'data': ranking,
    }
    return render(request, 'frontend/recommend.html', context=params)

def findsamePerson(target_sake, sample_lists):#(str, list[dict])
    #Extrahieren Sie Proben mit einer Ziellaugebewertung von 5
    #Fügen Sie die Daten (Wörterbuchtyp) von Personen mit hoher Bewertung in dieselbePersonList ein

    samePersonList = []
    for item in sample_lists:
        if item[target_sake] >= 3:
            samePersonList.append(item)
        else:
            pass
    return samePersonList

Senden Sie das vorhergesagte Ranking an die Rezeption und zeigen Sie es an

vies.py


    params = {
        'title': 'title',
        'massage': similarities,
        'Art der Flotte':quizAnser[0],#str
        'Snack 1':quizAnser[1],#str
        'Snack 2':quizAnser[2],
        'Snack 3':quizAnser[3],
        'Erster Platz':ranking[0][0],#str
        'quizAnser': quizAnser,#Liste der Namen der Eingabeergebnisse(str)[Sake, Otsu 1, Otsu 2, Otsu 3]
        'data': ranking,#Diktatliste=[{Snackname 1:Ähnlichkeitsgrad},{Snackname 2:Ähnlichkeitsgrad}...]Ähnlichkeitsgradでソート済み
    }
    return render(request, 'frontend/recommend.html', context=params)

Der Schlüssel (links) von params ist die Bezeichnung, die in HTML verwendet werden kann, und der Wert (rechts) ist der tatsächliche Inhalt

frontend/recommend.html


                        <h2>Ihr heutiger Snack ist ...</h2>
                        <img src="{% static 'frontend/img/result/salad.jpg' %}">
                        <h2>{{Erster Platz}}!!!</h2>
                        <br>
                        <p>{{Art der Flotte}}Perfekt für{{Erster Platz}}ist.<br>
                            <br>
Neben Salaten werden auch folgende Zutaten empfohlen.<br>
Wenn Sie nicht gut in Salaten sind oder andere Snacks essen möchten, lesen Sie bitte.</p>

                    </div>

                    {% for item, similarities in data %}
                    <p>
                        {{forloop.counter}}Rang:{{item}}【Punkt】: {{similarities}}
                    </p>

                    {% endfor %}

Sie können den Wert von Parametern mit {{key}} ausgeben und die Python-Funktion mit {%%} verwenden, sodass Sie eine Schleife ausführen. ↓ Ausgabebildschirm image.png

Registrieren Sie den Fragebogen in der DB

Es ist eine höllische Aufgabe, manuell zu tippen. Derzeit können nur ca. 20 registriert werden Ich werde es tun, während ich einen Film schaue

Ich werde Ramen essen. Wenn es irgendwelche seltsamen Dinge oder Verbesserungen gibt, fragen Sie bitte nach! Ich habe morgen zeit!

Die Seite, die ich gesehen habe

Umleiten mit Django und JavaScript (JS) JSON mit Django senden und empfangen Json on Django [Django] Optionsfelder installieren und Markups formatieren Weiterleitung durch Übergabe von Parametern (https://djangobrothers.com/blogs/django_redirect_with_parameters/) DB im Modell löschen (ModelChoiceField) Zeigen Sie auf dem Registrierungsbildschirm (Django) ein Optionsfeld an, das auf ein anderes Modell verweist. Ich verstehe die Logik des Bildschirmübergangs nicht how to convert Querydict to python dict Grundlagen des Formulars Ein Formular aus einem Modell erstellen

Recommended Posts

Fortschritt der Snackempfehlung (Memo)