#やっていること
現在、在庫管理アプリを個人的に作成しています。
#問題
primarykeyを設定しているコード以外のものをAdminサイトより更新することは出来ますが、
アプリより更新すると、PrimaryKeyと同じ値が既に存在しますと言われてしまいます。
Forms.pyにてPrimaryKeyの編集が出来ないよう、”readonly”の設定をしているため触れないのですが、
なぜか追加?という形で更新がかかってしまっているようです。
Primarykeyを外してみると普通に更新は行えており、更新したデータが2重で登録されるなどの事象はおきていません。
※PrimaryKeyを設定しているのはkamoku_codeです
#ソース
views
1from django.core.files.base import endswith_cr 2from django.http.response import Http404, HttpResponse 3from django.shortcuts import redirect, render, get_object_or_404 4from django.http import HttpResponse 5from .forms import KamokuForm, Kamoku_editForm 6from .models import Kamoku 7 8# Create your views here. 9 10def main(request): 11 return render(request, 'main.html') 12 13 14def kamoku(request): 15 kamokuForm = KamokuForm(request.POST) 16 if kamokuForm.is_valid(): 17 Kamoku.objects.create(**kamokuForm.cleaned_data) 18 return redirect('kamoku') 19 context = { 20 'kamokuForm': kamokuForm, 21 'kamokus': Kamoku.objects.all(), 22 } 23 return render(request, 'kamoku.html', context) 24 25 26def kamoku_edit(request, id): 27 kamoku = get_object_or_404(Kamoku, pk=id) 28 kamokuForm = Kamoku_editForm(instance=kamoku) 29 if request.method == 'POST': 30 kamokuForm = Kamoku_editForm(data=request.POST) 31 if kamokuForm.is_valid(): 32 kamoku.kamoku_name = kamokuForm.cleaned_data['kamoku_name'] 33 kamokuForm.save() 34 return redirect('kamoku') 35 36 context = { 37 'kamokus': Kamoku.objects.all(), 38 'kamokuForm': kamokuForm, 39 } 40 return render(request, 'kamoku_edit.html', context)
forms
1from django import forms 2from django.contrib.admin.widgets import AdminDateWidget 3from .models import Kamoku 4 5class KamokuForm(forms.ModelForm): 6 class Meta: 7 model = Kamoku 8 fields = ('kamoku_code', 'kamoku_name') 9 10class Kamoku_editForm(forms.ModelForm): 11 kamoku_code = forms.IntegerField( 12 widget=forms.TextInput( 13 attrs={ 14 'readonly': 'disabled' 15 } 16 ), 17 ) 18 class Meta: 19 model = Kamoku 20 fields = ('kamoku_code', 'kamoku_name')
models
1from django.db import models 2 3class Kamoku(models.Model): 4 kamoku_code = models.IntegerField(blank=False, null=False, primary_key=True, verbose_name="科目コード") 5 kamoku_name = models.CharField(max_length=255,verbose_name="科目名称") 6 created_at = models.DateTimeField(auto_now_add=True) 7 updated_at = models.DateTimeField(auto_now=True) 8 9 def __str__(self): 10 return self.kamoku_name
#最後に
更新処理は正しく動いているように思いますが、もしかするとそこがおかしいのかもしれません。
PrimaryKeyを外した場合は更新されることを確認しています。
PrimaryKeyをモデルに設定したことがないため、このような動きが正常なのか、自分の更新処理がおかしいのか判断がつきません。
わかる方が見えましたらご教授ください。
#追記
乗せた画像がものすごくわかりずらいですが、左側の一覧より100で始まるレコードを選択し、更新処理内でPKを指定しているため、右側の画面に情報が出ています。
科目名称という部分のみを変更して更新ボタンを押すと画像のようになります。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/12 03:44
2021/01/12 07:05
2021/01/12 07:35