klen / klen/mixer

Django 2.0 mixer.blend fails to populate model that has foreign key

Open
#105 4 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.