class ItemsTestCollection(models.Model):
"""An item to be tested in Box Opt."""
item = models.ForeignKey('item.Item', on_delete=models.CASCADE)
qty = models.IntegerField()
case = models.ForeignKey('EvaluateTestCase', on_delete=models.CASCADE)
box = models.ForeignKey('BoxResults', on_delete=models.CASCADE, null=True)
class ItemNumField(forms.CharField):
def validate(self, value):
# item = Item.objects.get(item_number=value)
# value = item.id
# return value
return Item.objects.get(item_number=value)
class AddItem(forms.ModelForm):
item = ItemNumField()
class Meta:
model = ItemsTestCollection
fields = ['item', 'qty', 'case']
class AddItemsToEvaluateCreateView(CreateView):
model = ItemsTestCollection
form_class = AddItem
template_name = 'utils\evaluate.html'
def get_queryset(self):
return ItemsTestCollection.objects.filter(case_id=self.kwargs['pk'])
def get_object(self, queryset=None):
return EvaluateTestCase.objects.get(pk=self.kwargs['pk'])
def get_success_url(self):
if 'add_more' in self.request.POST:
return reverse('utils:evaluate', kwargs={'pk': self.kwargs['pk']})
elif 'optimize' in self.request.POST:
return reverse('utils:results', kwargs={'pk': self.kwargs['pk']})
else:
return '/'
def get_context_data(self, **kwargs):
context = super().get_context_data()
context['case_id'] = self.kwargs['pk']
context['items_in_order'] = ItemsTestCollection.objects.filter(case_id=self.kwargs['pk'])
return context
Cannot assign "'515874'": "ItemsTestCollection.item" must be a "Item" instance.
| Request Method: | POST |
|---|---|
| Request URL: | http://localhost:8000/utils/box-optimization/add-items/118 |
| Django Version: | 2.0.5 |
| Exception Type: | ValueError |
| Exception Value: | Cannot assign "'515874'": "ItemsTestCollection.item" must be a "Item" instance. |
| Exception Location: | C:\miniconda3\envs\django\lib\site-packages\django\db\models\fields\related_descriptors.py in __set__, line 197 |
| Python Executable: | C:\miniconda3\envs\django\python.exe |
| Python Version: | 3.6.5 |
| Python Path: | ['C:\\WMS Repository\\Warehouse Management System', 'C:\\Program Files\\JetBrains\\PyCharm 2017.3.3\\helpers\\pydev', 'C:\\WMS Repository\\Warehouse Management System', 'C:\\Program Files\\JetBrains\\PyCharm 2017.3.3\\helpers\\pydev', 'C:\\Users\\heast\\.PyCharm2018.1\\system\\cythonExtensions', 'C:\\miniconda3\\envs\\django\\python36.zip', 'C:\\miniconda3\\envs\\django\\DLLs', 'C:\\miniconda3\\envs\\django\\lib', 'C:\\miniconda3\\envs\\django', 'C:\\Users\\heast\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\miniconda3\\envs\\django\\lib\\site-packages', 'C:\\Program Files\\JetBrains\\PyCharm ' '2017.3.3\\helpers\\pycharm_matplotlib_backend'] |
| Server time: | Mon, 16 Jul 2018 15:46:11 -0400 |
What I would do in that situation is add a custom field to the model form that holds the item number. Then, in the save method, convert that to the Item object.
class AddItem(forms.ModelForm):
item_number = IntegerField()
class Meta:
model = ItemsTestCollection
fields = ['qty', 'case']
def save(self, *args, **kwargs):
instance = super().save(commit=False)
instance.item = Item.objects.get(number=self.cleaned_data.get(‘item_number’))
instance.save()
return instance
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to
django-users...@googlegroups.com.
To post to this group, send email to
django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/16a9d28f-a23a-4112-acc5-f7be9bef4d12%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
To post to this group, send email to djang...@googlegroups.com.