vendredi 17 février 2017

Django mixer null value in column violates not-null constraint

I've just started using mixer with Django. My easiest test case fails because mixer isn't generating a value for a not null column.

I started my project with cookiecutter: cookiecutter http://ift.tt/1lH6sVc Then I startapp orders

users/models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import

from django.contrib.auth.models import AbstractUser
from django.core.urlresolvers import reverse
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _


@python_2_unicode_compatible
class User(AbstractUser):

    # First Name and Last Name do not cover name patterns
    # around the globe.
    name = models.CharField(_('Name of User'), blank=True, max_length=255)
    email = models.EmailField(_("email address"), unique=True)

    first_name = models.CharField(_("first name"), max_length=50)
    last_name = models.CharField(_("last name"), max_length=50)
    preferred_name = models.CharField(_("preferred name"), max_length=50, default="", blank=True)

    institution = models.CharField(_("institution"), default=None, max_length=200)
    group_lead = models.CharField(_("group leader"), default=None, max_length=200)
    account_number = models.CharField(_("account #"), default="", max_length=50, blank=True)

    address_street = models.CharField(_("street address"), default="", max_length=200, blank=True)
    address_street2 = models.CharField(_("street address cont..."), default="", max_length=200, blank=True)
    address_city = models.CharField(_("city"), default="", max_length=60, blank=True)
    address_zip = models.CharField(_("zip code"), max_length=5, default="", blank=True)
    address_country = models.CharField(_("country"), max_length=5, default="US", blank=True)


    def __str__(self):
        return self.username

    def get_absolute_url(self):
        return reverse('users:detail', kwargs={'username': self.username})

orders/models.py

class Order(DirtyFieldsMixin, models.Model):

name = models.CharField(max_length=255)
made_by = models.ForeignKey(settings.AUTH_USER_MODEL, models.PROTECT)
status = models.ForeignKey('OrderStatus', models.PROTECT)
date_accepted = models.DateField(blank=True, null=True)
date_started = models.DateField(blank=True, null=True)
date_completed = models.DateField(blank=True, null=True)
needs_attention = models.BooleanField(blank=True, default=False)

orders/tests/test_models.py

from mixer.backend.django import mixer
from tests.orders.models import Order

order = mixer.blend(Order)

Running python manage.py test results in error:

Traceback (most recent call last):   File "/var/www/test/test/test/users/tests/test_views.py", line 41, in setUp
    super(TestUserUpdateView, self).setUp()   File "/var/www/test/test/test/users/tests/test_views.py", line 14, in setUp
    self.user = self.make_user()   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/test_plus/test.py", line 275, in make_user
    password,   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/contrib/auth/models.py", line 157, in create_user
    return self._create_user(username, email, password, **extra_fields)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/contrib/auth/models.py", line 151, in _create_user
    user.save(using=self._db)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/contrib/auth/base_user.py", line 80, in save
    super(AbstractBaseUser, self).save(*args, **kwargs)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/db/models/base.py", line 796, in save
    force_update=force_update, update_fields=update_fields)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/db/models/base.py", line 824, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/db/models/base.py", line 908, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/db/models/base.py", line 947, in _do_insert
    using=using, raw=raw)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/db/models/query.py", line 1045, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 1054, in execute_sql
    cursor.execute(sql, params)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)   File "/home/vagrant/.virtualenvs/test/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params) django.db.utils.IntegrityError: null value in column "group_lead" violates not-null constraint DETAIL:  Failing row contains (15, pbkdf2_sha256$30000$CXwqevjMeBHt$8dYvI1PQEwzc5TwAGe5Mgq2oVeqqzxC..., null, f, testuser, , , testuser@example.com, f, t, 2017-02-18 02:50:46.889259+00, , , , US, , , , null, null, ).

Aucun commentaire:

Enregistrer un commentaire