I tried this but it’s still giving the same error
open_slabs = OpeningHours.objects.filter(vendor_id=self.vendor.id, day=self.day)
Internal Server Error: /admin/vendor/openinghours/add/
Traceback (most recent call last):
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\fields\__init__.py", line 2112, in get_prep_value
return int(value)
^^^^^^^^^^
TypeError: int() argument must be a string, a bytes-like object or a real number, not 'ForeignKey'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\core\handlers\exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\contrib\admin\options.py", line 714, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\utils\decorators.py", line 188, in _view_wrapper
result = _process_exception(request, e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\utils\decorators.py", line 186, in _view_wrapper
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\views\decorators\cache.py", line 80, in _view_wrapper
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\contrib\admin\sites.py", line 240, in inner
return view(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\contrib\admin\options.py", line 1941, in add_view
return self.changeform_view(request, None, form_url, extra_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\utils\decorators.py", line 48, in _wrapper
return bound_method(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\utils\decorators.py", line 188, in _view_wrapper
result = _process_exception(request, e)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\utils\decorators.py", line 186, in _view_wrapper
response = view_func(request, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\contrib\admin\options.py", line 1802, in changeform_view
return self._changeform_view(request, object_id, form_url, extra_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\contrib\admin\options.py", line 1847, in _changeform_view
form_validated = form.is_valid()
^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\forms\forms.py", line 197, in is_valid
return self.is_bound and not self.errors
^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\forms\forms.py", line 192, in errors
self.full_clean()
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\forms\forms.py", line 329, in full_clean
self._post_clean()
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\forms\models.py", line 495, in _post_clean
self.instance.full_clean(exclude=exclude, validate_unique=False)
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\base.py", line 1512, in full_clean
self.clean_fields(exclude=exclude)
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\base.py", line 1564, in clean_fields
setattr(self, f.attname, f.clean(raw_value, self))
^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\fields\__init__.py", line 837, in clean
self.run_validators(value)
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\fields\__init__.py", line 789, in run_validators
v(value)
File "X:\Multi Vendor Restaurant\Restaurant\vendor\models.py", line 78, in __call__
open_slabs = OpeningHours.objects.filter(vendor_id=self.vendor, day=self.day)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\manager.py", line 87, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\query.py", line 1476, in filter
return self._filter_or_exclude(False, args, kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\query.py", line 1494, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, args, kwargs)
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\query.py", line 1501, in _filter_or_exclude_inplace
self._query.add_q(Q(*args, **kwargs))
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\sql\query.py", line 1600, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\sql\query.py", line 1632, in _add_q
child_clause, needed_inner = self.build_filter(
^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\sql\query.py", line 1546, in build_filter
condition = self.build_lookup(lookups, col, value)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\sql\query.py", line 1376, in build_lookup
lookup = lookup_class(lhs, rhs)
^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\lookups.py", line 30, in __init__
self.rhs = self.get_prep_lookup()
^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\fields\related_lookups.py", line 156, in get_prep_lookup
self.rhs = target_field.get_prep_value(self.rhs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "X:\Multi Vendor Restaurant\.venv\Lib\site-packages\django\db\models\fields\__init__.py", line 2114, in get_prep_value
raise e.__class__(
TypeError: Field 'id' expected a number but got <django.db.models.fields.related.ForeignKey: vendor>.
[26/Jan/2024 11:37:34] "POST /admin/vendor/openinghours/add/ HTTP/1.1" 500 218292
I found out that when I am passing the variables to the constructor of my validator here open = models.FloatField(choices=TIME_CHOICES, validators=[OpeningOverlapValidator(day, vendor)])
it’s not passing the values with which it is attempting to create the model, instead it’s just simply passing the model.ForeignKey
constructor.
As validating this field require values of other fields the problem is happening here. I am not able to pass the value of other fields in the validator.