taoikuieo
@taoikuieo

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

csvが正しくアップロード出来ません

解決したいこと

csvを読み込みたいのですが、正しく表示されません。解決策を教えて下さい。
csvにはコードと氏名が入っています。

スクリーンショット 2024-10-30 120344.png

0

2Answer

コードを転記してもらわないと、回答も難しそうに思います。

添付いただいた画面からエスパーすると、
"コードと氏名"ということですが、画面の説明ではnumber,nameを読み取ると書きつつ、エラーでは、idとなっているので、数値と文字などで型が違うとかでしょうか

1Like

Comments

  1. @taoikuieo

    Questioner

    回答ありがとうございます。
    コードは全て転記した方がいいのでしょうか?
    具体的にadmin.pyやmodels.pyなど何処のコードが必要か教えて頂けると助かります。

  2. Djangoでは決まった名前のファイルなのかもしれませんが、それぞれどのようなコードが書かれているかわからないので、ファイル名では指示できません。

    csvファイルを読み込むところがあれば、まずは大丈夫かと思います。
    コードを貼り付ける時には、コードの最初と最後に```をつけてくくってください。

  3. @taoikuieo

    Questioner

    関係ありそうな所を転記しますので、見て頂けますでしょうか?
    admin.py

    from django.contrib import admin
    from .models import WorkerCode
    from import_export import resources
    from import_export.admin import ImportExportModelAdmin
    from import_export.fields import Field
    
    
    class WorkerCodeResource(resources.ModelResource):
        number = Field(attribute="number", column_name="number")
        name = Field(attribute="name", column_name="name")
    
        class Meta:
            model = WorkerCode
            skip_unchanged = True
            use_bulk = True
    
    class WorkerCodeAdmin(ImportExportModelAdmin):
        ordering = ["number"]
        list_display = ("number", "name")
    
    admin.site.register(WorkerCode, WorkerCodeAdmin)
    
    

    models.py

    from django.db import models
    
    class WorkerCode(models.Model):
        number = models.CharField(max_length=11, blank=True, primary_key=True)
        name = models.CharField(max_length=20, blank=True, null=True)
    
    

    宜しくお願いします。

  4. 定義が書かれたコードのように見えますが、それだけでcsvの取り込みがされるのでしょうか?
    エラーでは、idと出ているように見えますが、そのエラーを出しているところのコードはありませんか?

  5. ファイル選択、というボタンか、確定かを押すと、パスなどを設定して、csvファイルの取り込みを始めるのではないかと思います。
    その部分が見たいです。

  6. @taoikuieo

    Questioner

    django_import_exportという機能を追加してインポートボタンを押すとファイル選択画面が出て来るので、ファイルを選択して取り込むという流れになっています。
    なのでpathの設定はしていません。

  7. djangoに詳しくないので、外しているかもしれませんが、

    こちらを見ると、import_id_fieldsを指定しているように見えます。
    今のコードでは、idとnameが標準であって、それに、numberとname(こっちは上書きかもしれませんが)を追加している形になっているのかもしれません。
    id列を追加するか、
    import_id_fields = ('number',)
    としたら読み込めたりしませんか?

  8. @taoikuieo

    Questioner

    やり方が間違っていたのか出来ませんでした。
    上記のサイトも拝見しましたが、何処を変更したらいいのかわからずでした。
    わざわざ調べて頂いたのに申し訳ありません。

  9. csvのnumberを、idに変更したら、うまくいきませんか?

    コードを直すなら、たぶん下記のような感じかなと思いますが、どうでしょうか

    admin.py
    class WorkerCodeResource(resources.ModelResource):
        number = Field(attribute="number", column_name="number")
        name = Field(attribute="name", column_name="name")
    
        class Meta:
            model = WorkerCode
            skip_unchanged = True
            use_bulk = True
    +       import_id_fields = ('number',) #<---
    
  10. @taoikuieo

    Questioner

    "number"を全て"id"に変更したら下記のエラーが出ました。

    ERRORS:
    <class 'myapp.admin.WorkerCodeAdmin'>: (admin.E033) The value of 'ordering[0]' refers to 'id', which is not a field of 'myapp.WorkerCode'.
    <class 'myapp.admin.WorkerCodeAdmin'>: (admin.E108) The value of 'list_display[0]' refers to 'id', which is not a callable or attribute 
    of 'WorkerCodeAdmin', or an attribute, method, or field on 'myapp.WorkerCode'.
    
    System check identified 2 issues (0 silenced).
    
  11. myapp.WorkerCode にidがないです、って書いてるように見えるので、コードの方もnumberをidにかえてください
    list_displayもidがないので、numberをidにかえてください

  12. @taoikuieo

    Questioner

    スクリーンショット 2024-10-30 164822.png
    エラーは解消され読み込みは表示は変わりましたが中身が反映されません。

  13. すみません。こちらは画面が見えないので、エラーも結果もわかりません。
    何かヒントをもらえないでしょうか
    最初に投稿された画面の、エラーがなくて、真っ白な状態、ということでしょうか

  14. datatype mismatchなので、型が違うのではないでしょうか
    idに変えたことで、numberの11桁を元にしていると、桁が多すぎる、ということもあるのかもしれません。
    csvを1列増やして、

    • idを1から連番ではじめて
    • numberは元のまま
      という風にした方がいいのかもしれませんね。
    class WorkerCode(models.Model):
        number = models.CharField(max_length=11, blank=True, primary_key=True)
        name = models.CharField(max_length=20, blank=True, null=True)
    
  15. @taoikuieo

    Questioner

    最初に投稿した画面の読み込んだプレビュー画面の所が変更されました。
    行番号1 "id" → 行番号: 1 - datatype mismatch

  16. 私の方の指示が悪くて、遠回りさせてしまっているようで、申し訳ありません。
    次のようにしてみてもらえないでしょうか

    • コードを最初に提示してもらった状態に戻す
    • csvは、元の状態に、1列増やして、"id"を連番で追加

    これでどのような挙動になるか、確認していただけないでしょうか

問題がブラウザ側にあるのか(そもそもファイルがサーバーに送信されてない? 送信はされているが形式が正しくない?)、ブラウザ側は問題ないがサーバー側で受け取れないのか切り分けできませんか?

ブラウザからサーバーに送信されるヘッダとコンテンツの内容を Fiddler またはブラウザのディベロッパーツールでキャプチャしてその内容を見れば分かるはずです。

1Like

Comments

  1. @taoikuieo

    Questioner

    回答ありがとうございます。
    解決策を教えて下さり誠にありがたいのですが、初心者なものでおっしゃってることが難しくてわかりません。
    わざわざ回答してくださったのに申し訳ありません。

Your answer might help someone💌