取得IDを取得し、qoutations(単一または複数)を添付しています。レコードを保存すると、システムからエラーが表示されます。
createview自体からACQIDを選択してもエラーは発生しませんが、listviewからforiegnキーを取得すると、エラーが発生します。
リストビューから外部キーを取得し、作成ビューにそのキーの引用符を挿入しています
テンプレートが必要な場合は、単一のレコードを保存しても、システムが上記のようにエラーを出していることを知らせてください。
class QoutationAttach(SuccessMessageMixin, CreateView):
template_name = "ePROC/Acquisition/qoutation_add.html"
model = QoutationSelection
form_class=QoutationAdd
success_message = "Record was created successfully"
success_url = reverse_lazy('ePROC:qoutattach-list')
def form_valid(self, form):
form.instance.AcqID=CreateACQModel.objects.get(self.kwargs['pk'])
return super(QoutationAttach, self).form_valid(form)
class QoutationAttachListView(ListView):
template_name = "ePROC/Acquisition/qoutationattach_list.html"
model = QoutationSelection
queryset = QoutationSelection.objects.all()
context_object_name = 'query_results'
paginate_by = 10
def get_context_data(self, **kwargs):
context = super(QoutationAttachListView, self).get_context_data(**kwargs)
context['range'] = range(context["paginator"].num_pages)
return context
class QoutationAdd(forms.ModelForm):
class Meta:
model = QoutationSelection
labels = {
"Status":"Status",
"AcqID":"Acquisition ID",
"QoutID":"Qoutation ID",
}
fields=['QoutID','Status']
QoutID=forms.ModelMultipleChoiceField(queryset=QoutationModel.objects.all())
class CreateACQModel(models.Model):
RequestItem=models.ForeignKey(CreateReqModel,on_delete=None,related_name='CreateReqID')
ACQProcDate=models.DateTimeField(auto_now_add=True)
ACQStatus=models.CharField(default='Procure',max_length=40)
def __str__(self):
return '%s' %(self.RequestItem)
def get_absolute_url(self):
return reverse('request-list', kwargs={'pk':self.id})
class QoutationModel(models.Model):
REF=models.CharField(max_length=40,default='BKB-Q-')
RequestItem=models.ForeignKey(CreateACQModel,on_delete=None,related_name='CreateRID')
RequestQuantity=models.PositiveIntegerField(validators=[MinValueValidator(1)])
VendorID=models.ForeignKey(VendorModel,on_delete=None,related_name='VendorID')
ccy=models.CharField(choices=ccych,max_length=40)
amount=models.PositiveIntegerField(validators=[MinValueValidator(1)])
date=models.DateTimeField(auto_now_add=True)
status=models.CharField(max_length=40,choices=QouteCH,default='Received')
descr=models.TextField(null=True, max_length=200)
qoute=models.FileField(upload_to='documents/',validators=[FileExtensionValidator(['pdf','zip','rar', 'txt', 'jpg', 'gif', 'doc', 'docx', 'xls', 'xlsx'])],blank=True, null=True)
def __str__(self):
return '%s %s' %(self.RequestItem,self.REF)
class Admin:
pass
def get_absolute_url(self):
return reverse('qoutation-list', kwargs={'pk':self.id})
class QoutationSelection(models.Model):
AcqID=models.ForeignKey(CreateACQModel,on_delete=None)
QoutID=models.ManyToManyField(QoutationModel)
Status=models.CharField(max_length=40,default='NotSeleted')
def __unicode__(self):
return self.REF
def __str__(self):
return '%s %s' %(self.REF)
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/ePROC/Qoutation/Attach/4/
Django Version: 2.0
Python Version: 3.6.3
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'widget_tweaks',
'django_filters',
'django_tables2',
'rest_framework',
'crispy_forms',
'taggit',
'jquery',
'chartit',
'ePROC']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\exception.py" in inner
35. response = get_response(request)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py" in _get_response
128. response = self.process_exception_by_middleware(e, request)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py" in _get_response
126. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
21. return view_func(request, *args, **kwargs)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\views\generic\base.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\views\generic\base.py" in dispatch
89. return handler(request, *args, **kwargs)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\views\generic\edit.py" in post
172. return super().post(request, *args, **kwargs)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\views\generic\edit.py" in post
142. return self.form_valid(form)
File "C:\Users\NajVM\BANKERP\ePROC\views.py" in form_valid
228. form.instance.AcqID=CreateACQModel.objects.get(self.kwargs['pk'])
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\models\manager.py" in manager_method
82. return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\models\query.py" in get
394. clone = self.filter(*args, **kwargs)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\models\query.py" in filter
836. return self._filter_or_exclude(False, *args, **kwargs)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\models\query.py" in _filter_or_exclude
854. clone.query.add_q(Q(*args, **kwargs))
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\models\sql\query.py" in add_q
1252. clause, _ = self._add_q(q_object, self.used_aliases)
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\models\sql\query.py" in _add_q
1276. split_subq=split_subq,
File "C:\Users\NajVM\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\models\sql\query.py" in build_filter
1149. arg, value = filter_expr
Exception Type: ValueError at /ePROC/Qoutation/Attach/4/
Exception Value: not enough values to unpack (expected 2, got 1)
オブジェクトをフェッチするときは、主キーをkwargとして使用する必要があります。
form.instance.AcqID=CreateACQModel.objects.get(pk=self.kwargs['pk'])
現時点でDoesNotExist
は、データベースにその主キーを持つオブジェクトがない場合、500サーバーエラーにつながる例外が発生します。get_object_or_404
代わりに、ショートカットを使用して404ページを返すことができます。
from django.shortcuts import get_object_or_404
form.instance.AcqID=get_object_or_404(CreateACQModel, pk=self.kwargs['pk'])
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加