by Anonymous » 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>
- 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
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 ">
- 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 ?
entspricht
Was ich ausprobiert habe und erwartete Ergebnisse
[*]
Ü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>
- 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.
< /li>
[*]
Die Zuordnungen in Flaskella < /strong>
< /p>
- 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 (Code: Select all
filter(Assignment.teacher_id == current_user.id)
) [/b]
- Ein SQLALCHEMEY -Sitzungsproblem, bei dem Daten nicht ordnungsgemäß aktualisiert werden.
- Ein Problem damit, wie current_user.id abgerufen wird (obwohl es korrekt druckt)
Ich erstelle einen [b] -Brok-Schulzentrum [/b], in dem Lehrer Aufträge erstellen können, aber nach erfolgreicher Erstellung einer Aufgabe erscheint es [b] nicht im Lehrer-Dashboard [/b].
[b] Erwartete Verhalten < /strong> < /h3>
[list]
[*] Ein Lehrer erstellt eine Zuordnung. < /li>
Die Zuordnung wird in der Datenbank gespeichert. >
aktuelles [url=viewtopic.php?t=11587]Problem[/url] < /strong> < /h3>
Zuweisungen Save < /strong> in der Datenbank erfolgreich (bestätigt via db.session.Query (Zuweisung) .All () ).
[*][code]teacher_id[/code] wird korrekt an current_user.id zugewiesen. 'T abgerufen werden. H3> Zuordnungsmodell (SQLAlchemy) [/b]
[code]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())
[/code]
[*] Überprüfte Beziehungen [/b] - Der lehrer_id ist korrekt auf current_user.id .
[b] API -Antwort api [/b] -/get_teacher_assisignments [b] Gibt eine leere Liste [/b] zurück, obwohl Zuordnungen vorhanden sind.
[*] [b] Ü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]db.session.expire_all()
[/code]
[*] Gibt es ein potenzielles [url=viewtopic.php?t=11587]Problem[/url] mit den Join -Anweisungen, die gültige Datensätze ausschließen könnten? [/b]
< li> [b] Könnte es ein [url=viewtopic.php?t=11587]Problem[/url] mit current_user.id geben, das gespeicherte lehrer_id ? [/b]
[/list]
entspricht [b] Was ich ausprobiert habe und erwartete Ergebnisse [/b]
[*] [b] Überprüft, ob Zuordnungen korrekt gespeichert werden [/b] ✅
[b] Abfrage: [/b] print (db.session.Query (Zuordnung) .All ())
[*] [b] Ergebnis: [/b] Zuweisungen [b] existieren in der Datenbank [/b] mit korrekter lehrer_id und class_id .
[*] [b] Erwartet: [/b] Da die Daten ordnungsgemäß gespeichert sind, sollte sie im Lehrer -Dashboard angezeigt werden.
[/list]
< li> [b] verifizierte API -Antwort < /strong> 🔍 < /p>
[list]
[*] Anfrage: < /strong> gesendet eine GET -Anforderung an /get_teacher_assisignments .
[*] Ergebnis: [/b] Die API gibt {"Erfolg": True, "Zuweisungen": []} (leere Liste) .
[*] [b] Erwartet: [/b] Die API sollte alle vom angemeldeten Lehrer erstellten Zuweisungen zurückgeben.
[/list]
< /li>
[*] [b] Die Zuordnungen in Flaskella < /strong> 🖥️ < /p>
[list]
Abfrage: < /strong>
[code]db.session.query(Assignment).filter_by(teacher_id=current_user.id).all()
[/code]
[*] Ergebnis: [/b] Keine Zuordnungen gefunden, obwohl sie in der Datenbank vorhanden sind.
[*] [b] Erwartet: [/b] Die Abfrage sollte alle Zuordnungen für den angemeldeten Lehrer zurückgeben. [b] Überprüft, ob current_user.id lehrer_id [/b] 🆔
[b] Abfrage:
übereinstimmt: /strong>
[code]print(f"Current User ID: {current_user.id}")
print(f"Stored Teacher IDs: {[a.teacher_id for a in db.session.query(Assignment).all()]}")
[/code]
[*] Ergebnis: [/b] current_user.id stimmt mit einem vorhandenen Lehrer -ad überein, was das Filtering [b] bedeutet Sollte [/b].
[*] [b] Erwartet: [/b] Die Abfrage sollte Zuordnungen für den Lehrer zurückgeben, aber nicht.
< /ul>
< /li>
[*] [b] Versucht, sqlalchemy Session < /strong> 🔄 < /p>
Code versucht: < /strong>
[code]db.session.expire_all()
assignments = db.session.query(Assignment).filter_by(teacher_id=current_user.id).all()
[/code]
[*] Ergebnis: [/b] Gibt noch eine leere Liste zurück.
[*] [b] Erwartet: [/b] Wenn es sich um ein Sitzungsproblem handelte, hätte dies die Daten aktualisiert haben.
[b] Endgültige Gedanken < /strong> < /h3>
Da die Zuordnungen aber nicht abgerufen werden < /strong>, vermute ich, vermute ich : < /p>
Ein Filterproblem in der Abfrage (Abfrage ([code]filter(Assignment.teacher_id == current_user.id)[/code]) [/b]
[*] [b] Ein SQLALCHEMEY -Sitzungsproblem, bei dem Daten nicht ordnungsgemäß aktualisiert werden. [/b]
[*] [b] Ein [url=viewtopic.php?t=11587]Problem[/url] damit, wie current_user.id abgerufen wird (obwohl es korrekt druckt) [/b]
[/list]