Skip to content

Commit d6e8a6e

Browse files
pabrrsBrobin
authored andcommitted
Apply field default if it exists. (#44)
* Refactoring tests * Prevent to guess formatter if the field has an default value * Removing unused pprint import
1 parent e4b00f7 commit d6e8a6e

File tree

4 files changed

+48
-6
lines changed

4 files changed

+48
-6
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@ var/
3131
*.egg
3232

3333
env/
34-
.idea
34+
.idea
35+
.vscode

django_seed/guessers.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ def guess_format(self, field):
6666
faker = self.faker
6767
provider = self.provider
6868

69-
7069
if isinstance(field, DurationField): return lambda x: provider.duration()
7170
if isinstance(field, UUIDField): return lambda x: provider.uuid()
7271

django_seed/seeder.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,15 @@ def guess_field_formatters(self, faker):
3838
field_type_guesser = FieldTypeGuesser(faker)
3939

4040
for field in self.model._meta.fields:
41+
4142
field_name = field.name
43+
44+
if field.get_default():
45+
formatters[field_name] = field.get_default()
46+
continue
47+
4248
if isinstance(field, (ForeignKey, ManyToManyField, OneToOneField)):
43-
formatters[field_name] = self.build_relation(field, field.rel.to)
49+
formatters[field_name] = self.build_relation(field, field.related_model)
4450
continue
4551

4652
if isinstance(field, AutoField):

django_seed/tests.py

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class Player(models.Model):
6363
avatar = models.FilePathField()
6464
score = models.BigIntegerField()
6565
last_login_at = models.DateTimeField()
66-
game = models.ForeignKey(Game)
66+
game = models.ForeignKey(to=Game, on_delete=models.CASCADE)
6767
ip = models.IPAddressField()
6868
achievements = models.CommaSeparatedIntegerField(max_length=1000)
6969
friends = models.PositiveIntegerField()
@@ -83,8 +83,15 @@ class Action(models.Model):
8383
executed_at = models.DateTimeField()
8484
duration = models.DurationField()
8585
uuid = models.UUIDField()
86-
actor = models.ForeignKey(Player,related_name='actions', null=False)
87-
target = models.ForeignKey(Player, related_name='enemy_actions+', null=True)
86+
actor = models.ForeignKey(to=Player,on_delete=models.CASCADE,related_name='actions', null=False)
87+
target = models.ForeignKey(to=Player,on_delete=models.CASCADE, related_name='enemy_actions+', null=True)
88+
89+
class Product(models.Model):
90+
91+
name = models.CharField(max_length=100)
92+
short_description = models.CharField(max_length=100, default='default short description')
93+
description = models.TextField(default='default long description')
94+
enabled = models.BooleanField(default=True)
8895

8996

9097
class NameGuesserTestCase(TestCase):
@@ -258,3 +265,32 @@ def test_invalid_number_arg(self):
258265
except Exception as e:
259266
self.assertTrue(isinstance(e, SeederCommandError))
260267
pass
268+
269+
class DefaultValueTestCase(TestCase):
270+
271+
def test_default_value_guessed_by_field_type(self):
272+
faker = fake
273+
seeder = Seeder(faker)
274+
275+
seeder.add_entity(Product, 1, {'name':'Awesome Product'})
276+
_id = seeder.execute()
277+
278+
self.assertIsNotNone(_id)
279+
280+
product = Product.objects.get(id=_id[Product][0])
281+
282+
self.assertEquals(product.short_description, 'default short description')
283+
self.assertTrue(product.enabled)
284+
285+
def test_default_value_guessed_by_field_name(self):
286+
faker = fake
287+
seeder = Seeder(faker)
288+
289+
seeder.add_entity(Product, 1, {'name':'Great Product'})
290+
_id = seeder.execute()
291+
292+
self.assertIsNotNone(_id)
293+
294+
product = Product.objects.get(id=_id[Product][0])
295+
296+
self.assertEquals(product.description, 'default long description')

0 commit comments

Comments
 (0)