Django 2.0 mixer.blend fails to populate model that has foreign key
- Dominant language
- Python
- Stars
- 953
- Forks
- 91
- PR merge metrics
- No merged PRs in 30d
Description
Hi,
Here are my models:
```
class Instrument(models.Model):
stock_code = models.CharField(max_length=50)
asset_type = models.ForeignKey(AssetType, on_delete=models.DO_NOTHING)
data = JSONField()
def __str__(self):
return self.stock_code
```
```
class AssetType(models.Model):
code = models.CharField(max_length=5)
name = models.CharField(max_length=25)
def __str__(self):
return self.name
```
When I try to test Instrument model:
```
class TestInstrument:
def test_model(self):
obj = mixer.blend(Instrument)
assert obj.pk == 1, "Should save an Instrument instance"
```
I receive following error:
```
_____________________________________________________________________________ TestInstrument.test_model _____________________________________________________________________________
self = , value =
def to_python(self, value):
if value is None:
return value
try:
> return int(value)
E TypeError: int() argument must be a string, a bytes-like object or a number, not 'AssetType'
../venv/lib/python3.6/site-packages/django/db/models/fields/__init__.py:940: TypeError
During handling of the above exception, another exception occurred:
self =
def test_model(self):
> obj = mixer.blend(Instrument)
strategy/tests/test_models.py:34:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../venv/lib/python3.6/site-packages/mixer/main.py:568: in blend
return type_mixer.blend(**values)
../venv/lib/python3.6/site-packages/mixer/main.py:116: in blend
for name, value in defaults.items()
../venv/lib/python3.6/site-packages/mixer/main.py:116: in
for name, value in defaults.items()
../venv/lib/python3.6/site-packages/mixer/mix_types.py:222: in gen_value
return type_mixer.gen_field(field)
../venv/lib/python3.6/site-packages/mixer/backend/django.py:270: in gen_field
return super(TypeMixer, self).gen_field(field)
../venv/lib/python3.6/site-packages/mixer/main.py:193: in gen_field
return self.gen_value(field.name, field, unique=unique)
../venv/lib/python3.6/site-packages/mixer/main.py:261: in gen_value
return self.get_value(field_name, value)
../venv/lib/python3.6/site-packages/mixer/backend/django.py:218: in get_value
return self._get_value(name, value, field)
../venv/lib/python3.6/site-packages/mixer/backend/django.py:233: in _get_value
value = field.scheme.to_python(value)
../venv/lib/python3.6/site-packages/django/db/models/fields/related.py:874: in to_python
return self.target_field.to_python(value)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = , value =
def to_python(self, value):
if value is None:
return value
try:
return int(value)
except (TypeError, ValueError):
raise exceptions.ValidationError(
self.error_messages['invalid'],
code='invalid',
> params={'value': value},
)
E django.core.exceptions.ValidationError: ["'Jared Smith' value must be an integer."]
../venv/lib/python3.6/site-packages/django/db/models/fields/__init__.py:945: ValidationError
```
What is wrong with my models?
Thanks
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the failure with the reported Instrument and AssetType models and the test_model test. Start in mixer/backend/django.py, following the call through mixer/main.py and mixer/mix_types.py. Done means mixer.blend(Instrument) completes without the foreign-key validation error and the test passes.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- django, python
- Domain
- backend, testing
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100