Erstellte Aufgaben, die nicht im Lehrer -Dashboard angezeigt werden
Posted: 16 Feb 2025, 14:37
Ich erstelle einen -Brok-Schulzentrum , in dem Lehrer Aufträge erstellen können, aber nach erfolgreicher Erstellung einer Aufgabe erscheint es nicht im Lehrer-Dashboard .
Erwartete Verhalten < /strong> < /h3>
[*] Überprüft, ob Zuordnungen korrekt gespeichert werden
Abfrage: print (db.session.Query (Zuordnung) .All ())
[*] Ergebnis: Zuweisungen existieren in der Datenbank mit korrekter lehrer_id und class_id .
[*] Erwartet: Da die Daten ordnungsgemäß gespeichert sind, sollte sie im Lehrer -Dashboard angezeigt werden.
[/list]
< li> verifizierte API -Antwort < /strong>
< /p>
[*] Die Zuordnungen in Flaskella < /strong>
< /p>
Erwartete Verhalten < /strong> < /h3>
- Ein Lehrer erstellt eine Zuordnung. < /li>
Die Zuordnung wird in der Datenbank gespeichert. >
aktuelles Problem < /strong> < /h3>
Zuweisungen Save < /strong> in der Datenbank erfolgreich (bestätigt via db.session.Query (Zuweisung) .All () ). - wird korrekt an current_user.id zugewiesen. 'T abgerufen werden. H3> Zuordnungsmodell (SQLAlchemy) [/b]
Code: Select all
teacher_id
Code: Select all
class Assignment(db.Model): __tablename__ = 'assignments' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255), nullable=False) description = db.Column(db.Text) due_date = db.Column(db.Date) teacher_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) class_id = db.Column(db.Integer, db.ForeignKey('classes.id'), nullable=False) teacher = db.relationship('User', back_populates='teacher_assignments') class_info = db.relationship('Class', back_populates='assignments') < /code> [b] Erstellung von Zuweisungen < /strong> < /h3> @main.route('/create_assignment', methods=['POST']) @login_required def create_assignment(): if current_user.role != 'teacher': return jsonify({'success': False, 'message': 'Unauthorized'}), 403 data = request.get_json() title, description, due_date, class_code = data.get('title'), data.get('description'), data.get('due_date'), data.get('class_code') if not title or not description or not due_date or not class_code: return jsonify({'success': False, 'message': 'All fields are required.'}), 400 try: due_date_obj = datetime.strptime(due_date, '%Y-%m-%dT%H:%M') except ValueError: return jsonify({'success': False, 'message': 'Invalid date format.'}), 400 class_entry = Class.query.filter_by(id=class_code).first() if not class_entry: return jsonify({'success': False, 'message': 'Invalid class code.'}), 404 new_assignment = Assignment( name=title, description=description, due_date=due_date_obj, teacher_id=current_user.id, class_id=class_entry.id ) db.session.add(new_assignment) db.session.commit() return jsonify({'success': True, 'message': 'Assignment created successfully!'}), 200 < /code> Abrufzuweisungen (für Lehrer-Dashboard) < /strong> < /h3> @main.route('/get_teacher_assignments', methods=['GET']) @login_required def get_teacher_assignments(): if current_user.role != 'teacher': return jsonify({"success": False, "message": "Unauthorized"}), 403 assignments = ( db.session.query( Assignment.id, Assignment.name, Assignment.description, Assignment.due_date, Class.name.label("class_name"), User.username.label("teacher_username") ) .join(Class, Assignment.class_id == Class.id) .join(User, Assignment.teacher_id == User.id) .filter(Assignment.teacher_id == current_user.id) .order_by(Assignment.due_date) .all() ) return jsonify({ "success": True, "assignments": [ { "id": a.id, "name": a.name, "description": a.description, "due_date": a.due_date.strftime("%Y-%m-%d %H:%M"), "class_name": a.class_name, "teacher_username": a.teacher_username } for a in assignments ] }) < /code> Frontend (Ajax-Fetch-Anruf) < /strong> < /h3> $(document).ready(function() { function fetchAssignments() { $('#loadingSpinner').show(); $('#assignmentList').hide(); $.ajax({ url: '/get_teacher_assignments', method: 'GET', success: function(response) { $('#assignmentList').empty(); if (response.success && response.assignments.length > 0) { response.assignments.forEach(assignment => { $('#assignmentList').append(` ${assignment.name} Class:[/b] ${assignment.class_name} [b]Teacher:[/b] ${assignment.teacher_username} [b]Description:[/b] ${assignment.description} [b]Due Date:[/b] ${assignment.due_date} `); }); } else { $('#assignmentList').append(' No assignments found. '); } $('#loadingSpinner').hide(); $('#assignmentList').show(); }, error: function(xhr, status, error) { console.error('Error fetching assignments:', error); $('#loadingSpinner').hide(); } }); } fetchAssignments(); }); < /code> [b] Debugging -Schritte, die ausgeführt wurden < /strong> < /h2> [list] Überprüfte Datenbank [/b]-Die Zuordnung [b] wird korrekt gespeichert.print(db.session.query(Assignment).all())
- Überprüfte Beziehungen [/b] - Der lehrer_id ist korrekt auf current_user.id .
API -Antwort api -/get_teacher_assisignments Gibt eine leere Liste zurück, obwohl Zuordnungen vorhanden sind. - Überprüftes Klassen -ID -Filtering < /strong> - Die class_id < /code> existiert und ist korrekt zugewiesen. < /li>
< /ol>
Mögliche Ursachen & Fragen < /strong> < /h2>
ist der Filter (Zuweisung.Teacher_id == current_user.id) < /Code> Bedingung falsch? überschreiben ">Code: Select all
db.session.expire_all()
- Gibt es ein potenzielles Problem mit den Join -Anweisungen, die gültige Datensätze ausschließen könnten? [/b]
< li> Könnte es ein Problem mit current_user.id geben, das gespeicherte lehrer_id ?
[*] Überprüft, ob Zuordnungen korrekt gespeichert werden
Abfrage: print (db.session.Query (Zuordnung) .All ())
[*] Ergebnis: Zuweisungen existieren in der Datenbank mit korrekter lehrer_id und class_id .
[*] Erwartet: Da die Daten ordnungsgemäß gespeichert sind, sollte sie im Lehrer -Dashboard angezeigt werden.
[/list]
< li> verifizierte API -Antwort < /strong>
- Anfrage: < /strong> gesendet eine GET -Anforderung an /get_teacher_assisignments .
- Ergebnis: Die API gibt {"Erfolg": True, "Zuweisungen": []} (leere Liste) .
- Erwartet: Die API sollte alle vom angemeldeten Lehrer erstellten Zuweisungen zurückgeben.
[*] Die Zuordnungen in Flaskella < /strong>
- Abfrage: < /strong>
Code: Select all
db.session.query(Assignment).filter_by(teacher_id=current_user.id).all()
- Ergebnis: [/b] Keine Zuordnungen gefunden, obwohl sie in der Datenbank vorhanden sind.
- Erwartet: Die Abfrage sollte alle Zuordnungen für den angemeldeten Lehrer zurückgeben. Überprüft, ob current_user.id lehrer_id
Abfrage:
übereinstimmt: /strong>Code: Select all
print(f"Current User ID: {current_user.id}") print(f"Stored Teacher IDs: {[a.teacher_id for a in db.session.query(Assignment).all()]}")
- Ergebnis: [/b] current_user.id stimmt mit einem vorhandenen Lehrer -ad überein, was das Filtering bedeutet Sollte .
- Erwartet: Die Abfrage sollte Zuordnungen für den Lehrer zurückgeben, aber nicht.
< /ul>
< /li> - Versucht, sqlalchemy Session < /strong>
< /p>
Code versucht: < /strong>Code: Select all
db.session.expire_all() assignments = db.session.query(Assignment).filter_by(teacher_id=current_user.id).all()
- Ergebnis: [/b] Gibt noch eine leere Liste zurück.
- Erwartet: Wenn es sich um ein Sitzungsproblem handelte, hätte dies die Daten aktualisiert haben.
Endgültige Gedanken < /strong> < /h3>
Da die Zuordnungen aber nicht abgerufen werden < /strong>, vermute ich, vermute ich : < /p>
Ein Filterproblem in der Abfrage (Abfrage () [/b]Code: Select all
filter(Assignment.teacher_id == current_user.id)
- Ein SQLALCHEMEY -Sitzungsproblem, bei dem Daten nicht ordnungsgemäß aktualisiert werden.
- Ein Problem damit, wie current_user.id abgerufen wird (obwohl es korrekt druckt)