Giter Site home page Giter Site logo

esuits_junki's People

Contributors

junkhp avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

namihagi

esuits_junki's Issues

作成→編集のときに画面遷移が遅い

概要

ワードクラウド作成に時間がかかる(これは割と仕方ない)
そのため、作成→編集のとき、下記の仕様のはず

  • とりあえず画面遷移
  • ワードクラウドの部分は作成中にする。
  • ワードクラウドが完成し次第、編集画面のワードクラウドを更新

なのに下記の処理手順になっているっぽいなっているっぽい

  • ワードクラウド作成
  • 画面遷移

es_editのformを書き換える。

es_editのformを書き換える

経緯

  • inlineformset_factoryを使用してformsetを作成
  • 回答テーブルが切り離されたことで依存関係が変わった(親:ES, 子:質問 → 親:質問, 子:回答)
  • 仕様変更に対しての柔軟性がない
  • そもそもフォームで入力したいのは回答だけ
  • 履歴管理で履歴管理処理をする前の変更内容を保存するときにやりづらい

書き換え後

  • 質問テーブルから回答フィールドを完全に消去
  • 単純なformとformsetで実装する。

modelformsetで詰まったところ

コード

formset

AnswerUpdateFormSet = forms.modelformset_factory(
            model=AnswerModel,
            fields=(answer,),
            extra=0
        )

view.py

formsets = AnswerUpdateFormSet(queryset=更新するQuerySet)

つまったところ

  • extraは新規の空白のフォームの数なのでupdateの場合はextra=0
  • defaultはqueryset=Model.objects.all()なのでAnswerModelを全選択してしまう

更にわからないところ

回答モデルをORMで一発で絞り込む方法がわからない

絞り込む条件

  • 選択したESに紐付いている質問に紐付いていること
  • バージョンがquestion.selected_versionと一致していること
  • SQLで書くとしたら
SELECT *
FROM answers
JOIN questions
ON answers.question_id = questions.id
WHERE
  question_id in questions
  AND answers.version = questions.selected_version

トランザクションを考える

トランザクションを考える

Djangoのデフォルトは、オートコミット(save()やdelete()をしたタイミングでデータベースが変更される)

Djangoのトランザクション

  1. ミドルウェアで解決する
    • 'settings.py'でATOMIC REQUESTSをTrueにする。
    • view単位でトランザクションが適用される
  2. with句でtransaction.atomic()を適用する
    • with句で囲んだ部分が1つのトランザクションになる

やること

トランザクションを整備する

参考

Django のトランザクションについて(初級者向け)

最初の回答を作成(#11 関連)

escreate/views.pyの98行目

question_form.save()

のあとに保存された質問レコードに紐づく回答レコードを新規作成

new_answer_record = AnswerModel(question=question_record)
new_answer_record.save()

question_record = question_form.save()では、question_recordが取得できない

履歴機能を実装

回答内容に編集を加えたときにその変更を新しい回答として保存できるようにしたい

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.