Созданные задания, не отображаемые на панели панели учителяPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Созданные задания, не отображаемые на панели панели учителя

Сообщение Anonymous »

Я создаю школьной концентратор на основе флэк , где учителя могут создавать задания, но после успешного создания задания это не появляется на панели панели учителя . < /h3>
  • Учитель создает задание. < /li>
    Назначение хранится в базе данных. >
    текущая проблема < /strong> < /h3>

    Назначения успешно сохранить < /strong> в базе данных (подтверждено через db.session.query (назначение) .all () ).
  • Код: Выделить всё

    teacher_id
    правильно присваивается на current_user.id .
  • the/get_teacher_assignments api Возвращает пустой список [/b], значение для назначений. 'T извлечен. H3> модель назначения (sqlalchemy)

    Код: Выделить всё

    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] маршрут создания назначения < /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>
    
      извлечение заданий (для панели панели учителя) < /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 call) < /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] шаги отладки Проверенная база данных [/b]-назначение [b] хранится правильно [/b] при запросе вручную:
    print(db.session.query(Assignment).all())
    
  • проверенные отношения - учитель_ид правильно отображается с current_user.id .
    проверенный ответ API -/get_teacher_assignments Возвращает пустой список , несмотря на наличие назначений.
  • проверенный идентификатор класса фильтрация < /strong> - class_id < /code> существует и правильно назначена. < /li>
    < /ol>

    возможные причины и вопросы < /strong> < /h2>
    • - фильтр (назначение. /code> Условие неправильно? переопределить ">

      Код: Выделить всё

      db.session.expire_all()
      
    • Есть ли потенциальная проблема с операторами соединения, которые могут исключить допустимые записи? [/b]
      < li> Может ли возникнуть проблема с current_user.id не совпадать с сохраненным учителем_ид ?
    Что я попробовал и ожидали результаты
    • Проверено, если назначения сохранены правильно ✅

      Query: print (db.session.query (назначение) .all ())
    • Результат: назначения существуют в базе данных с правильным учителем_ид и class_id .
    • ожидается: Поскольку данные хранятся должным образом, они должны появляться на панели инструментов учителя.

    < li> проверенный ответ API < /strong> 🔍 < /p>
    • запрос: < /strong> отправил запрос на получение /get_teacher_assignments .
    • result: API возвращает {"успех": true, "назначения": []} (пустой список) .
    • ожидается: API должен вернуть все задания, созданные в регистрации учителя.
    < /li>
  • запрашиваемые вручную назначения в Flask Shell < /strong> 🖥 < /p>
    • Запрос: < /strong>

      Код: Выделить всё

      db.session.query(Assignment).filter_by(teacher_id=current_user.id).all()
      
    • Результат: [/b] не обнаружено, несмотря на то, что они присутствуют в базе данных.
    • ожидается: Запрос должен вернуть все задания для регистрированного учителя.
  • проверяется, если current_user.id соответствует учителю_ид 🆔
    • Query: < /strong>

      Код: Выделить всё

      print(f"Current User ID: {current_user.id}")
      print(f"Stored Teacher IDs: {[a.teacher_id for a in db.session.query(Assignment).all()]}")
      
    • result: [/b] current_user.id соответствует существующему учителю_ид , что означает фильтрацию должен работать .
    • ожидается: Запрос должен вернуть назначения для учителя, но это не так.
      < /ul>
      < /li>
    • попытаться освежить Sqlalchemy Session < /strong> 🔄 < /p>

      Попытка кода: < /strong>

      Код: Выделить всё

      db.session.expire_all()
      assignments = db.session.query(Assignment).filter_by(teacher_id=current_user.id).all()
      
    • Результат: [/b] по -прежнему возвращает пустой список.
    • Ожидаемое: Если бы это была проблема сеанса, это должно было обновить данные.
окончательные мысли < /strong> < /h3>
Поскольку задания существуют , но не получают < /strong>, я подозреваю : < /p>
  • проблема фильтрации в запросе (

    Код: Выделить всё

    filter(Assignment.teacher_id == current_user.id)
    ) [/b]
  • Проблема сеанса SQLalchemy, где данные не обновляются должным образом
  • проблема с тем, как current_user.id получена (даже если она печатается правильно)


Подробнее здесь: https://stackoverflow.com/questions/794 ... -dashboard
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»