##現在
現在、顧客情報を階層毎にわけて管理するサイトを作成しています。
その中で1点、いろいろ調べてみましたが制限がかけられないため質問させていただきます。
##症状
Forms.pyにて、各階層の登録画面、編集画面を管理しています。
その中で、第2階層の登録画面で第1階層で選択したPK(id)をもとにfilterをかけたいのですが、
うまくかからず困っています。
また、readonlyの設定をしているにもかかわらず、更新処理が出来てしまうのも解決できません。
※違う第1階層に変更して更新を流すと普通に変更されてしまう。
該当のソースコードを載せますのでご教授ください。
##ソース
・views.py
def wholesaler(request): context = { 'wholesaler': Wholesaler.objects.all(), } return render(request, 'wholesaler.html', context) def wholesaler_add(request): wholesalerform = WholesalerForm(request.POST) if wholesalerform.is_valid(): Wholesaler.objects.create(**wholesalerform.cleaned_data) return redirect('wholesaler') context = { 'wholesalerform': wholesalerform, } return render(request, 'wholesaler_add.html', context) def sales_outlet(request, id): wholesaler = get_object_or_404(Wholesaler, pk=id) context = { 'sales_outlet': Sales_Outlet.objects.filter(wholesaler_name=id), 'wholesaler': wholesaler.id, } return render(request, 'sales_outlet.html', context) def sales_outlet_add(request, id): initial_dict = { 'wholesaler_name': get_object_or_404(Wholesaler, pk=id), } wholesaler = get_object_or_404(Wholesaler, pk=id) sales_outletform = Sales_OutletForm(request.POST, initial = initial_dict) if sales_outletform.is_valid(): Sales_Outlet.objects.create(**sales_outletform.cleaned_data) return redirect('sales_outlet', id) context = { 'sales_outletform': sales_outletform, 'wholesaler': wholesaler.id, } return render(request, 'sales_outlet_add.html', context) def sales_outlet_edit(request, id, pk): wholesaler = get_object_or_404(Wholesaler, pk=id) sales_outlet = get_object_or_404(Sales_Outlet, wholesaler_name=id, pk=pk) sales_outlet_editForm = Sales_Outlet_editForm(instance=sales_outlet) if request.method == 'POST': sales_outlet_editForm = Sales_Outlet_editForm(request.POST, instance=sales_outlet) if sales_outlet_editForm.is_valid(): Sales_Outlet.sales_outlet_name = sales_outlet_editForm.cleaned_data['sales_outlet_name'] Sales_Outlet.sales_outlet_name_kana = sales_outlet_editForm.cleaned_data['sales_outlet_name_kana'] sales_outlet_editForm.save() return redirect('sales_outlet', id) context = { 'sales_outlet_editForm': sales_outlet_editForm, 'wholesaler': wholesaler.id, 'sales_outlet': sales_outlet.id, } return render(request, 'sales_outlet_edit.html', context)
・forms.py
class WholesalerForm(forms.ModelForm): class Meta: model = Wholesaler fields = ('wholesaler_name',) class Sales_OutletForm(forms.ModelForm): def __int__(self, id, *args, **kwargs): super(Sales_OutletForm, self).__init__(*args, **kwargs) self.fields['wholesaler_name'].initial = Sales_Outlet.wholesaler_name = id class Meta: model = Sales_Outlet fields = ('wholesaler_name', 'sales_outlet_name', 'sales_outlet_name_kana') class Sales_Outlet_editForm(forms.ModelForm): def __int__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['wholesaler_name'].widget.attrs['readonly'] = 'readonly' class Meta: model = Sales_Outlet fields = ('wholesaler_name', 'sales_outlet_name', 'sales_outlet_name_kana')
##試したこと
querysetで絞込を行ってみましたがそれでもだめでした。
・forms.py
class Sales_OutletForm(forms.ModelForm): def __int__(self, id, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['wholesaler_name'].queryset = Sales_Outlet.objects.filter(wholesaler_name = id) class Meta: model = Sales_Outlet fields = ('wholesaler_name', 'sales_outlet_name', 'sales_outlet_name_kana')
##最後に
現状は、initialを利用して初期値を設定しようと考えましたが初期値が入らない状態です。
TemplatesはBootStrap_formを使用して表示しています。
ForeignKeyが原因でfilterが出来ていないとは思いますが、
どのようにすれば制御がかけられるのか教えていただきたいです。
readonly自身はフォームに対して効いているとは思います。(背景がグレーアウトしているため)
よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/01 02:17
2021/02/01 02:50