Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion django_any/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
__version__ = (0, 2, 3, 'final', 0)
__version__ = (0, 2, 4, 'final', 0)
try:
from django_any.forms import any_form_field, any_form
from django_any.models import any_field, any_model
Expand Down
21 changes: 14 additions & 7 deletions django_any/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@
from decimal import Decimal
from datetime import date, datetime, time
from string import ascii_letters, digits, hexdigits
from random import choice
from random import choice, randint

from django.conf import settings
from django.core.exceptions import ValidationError
from django.core.exceptions import ValidationError, MultipleObjectsReturned
from django.core import validators
from django.db import models, IntegrityError
from django.db.models import Q
Expand Down Expand Up @@ -165,15 +165,15 @@ def any_datetime_field(field, **kwargs):
"""
USE_TZ = getattr(settings, 'USE_TZ', False)
from_date = kwargs.get('from_date', datetime(1990, 1, 1))

if USE_TZ:
from django.utils.timezone import now, get_current_timezone, make_aware

from_date = make_aware(from_date, get_current_timezone())
to_date = kwargs.get('to_date', now())
else:
else:
to_date = kwargs.get('to_date', datetime.today())

return xunit.any_datetime(from_date=from_date, to_date=to_date)


Expand Down Expand Up @@ -497,7 +497,14 @@ def _fill_model_fields(model, **kwargs):
Lookup ForeingKey field in db
"""
key_field = model._meta.get_field(field.name)
value = key_field.rel.to.objects.get(kwargs[field.name])
# Handle situation if lookup returns multiple objects
try:
value = key_field.rel.to.objects.get(kwargs[field.name])
except MultipleObjectsReturned:
queryset = key_field.rel.to.objects.filter(
kwargs[field.name])
queryset_count = queryset.count()
value = queryset[randint(0, queryset_count - 1)]
setattr(model, field.name, value)
else:
# TODO support any_model call
Expand Down
15 changes: 7 additions & 8 deletions django_any/test.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
# -*- coding: utf-8 -*-
import time, random

try:
from unittest import _strclass
except ImportError:
_strclass = str
import time
import random

from django import forms
from django_any import any_form
Expand Down Expand Up @@ -127,7 +123,11 @@ def __new__(cls, cls_name, bases, attrs):
attrs['__django_any_seed'] = 0

def shortDescription(self):
return "%s (%s) With seed %s" % (self._testMethodName, _strclass(self.__class__), getattr(self, '__django_any_seed'))
return "%s (%s.%s) With seed %s" % \
(self._testMethodName,
self.__module__,
self.__name__,
getattr(self, '__django_any_seed'))

for name, func in attrs.items():
if name.startswith('test') and hasattr(func, '__call__'):
Expand All @@ -142,4 +142,3 @@ def shortDescription(self):
testcase = super(WithTestDataSeed, cls).__new__(cls, cls_name, bases, attrs)
testcase.shortDescription = shortDescription
return testcase

17 changes: 14 additions & 3 deletions django_any/tests/model_qobjects_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,31 @@
class QObjectRelated(models.Model):
class Meta:
app_label = 'django_any'
flag = models.BooleanField(default=False)


class RelatedToQObject(models.Model):
related = models.ForeignKey(QObjectRelated)

class Meta:
app_label = 'django_any'


class QObjectsSupport(TestCase):
def setUp(self):
self.related = any_model(QObjectRelated)
self.related = any_model(QObjectRelated, flag=False)

def test_qobject_specification(self):
result = any_model(RelatedToQObject, related=Q(pk=self.related.pk))
self.assertEqual(self.related, result.related)

def test_qobject_multiple_objects_returned(self):
"""If Q() lookup return multiple objects, we select
random one.

"""
# Create additional related instance
any_model(QObjectRelated, flag=False)

result = any_model(RelatedToQObject, related=Q(flag=False))
self.assertIn(result.related, list(QObjectRelated.objects.all()))
Loading