model-bakery 1.18.2__tar.gz → 1.18.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of model-bakery might be problematic. Click here for more details.
- {model_bakery-1.18.2 → model_bakery-1.18.3}/PKG-INFO +1 -1
- model_bakery-1.18.3/model_bakery/__about__.py +1 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/baker.py +16 -4
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/content_types.py +3 -0
- model_bakery-1.18.2/model_bakery/__about__.py +0 -1
- {model_bakery-1.18.2 → model_bakery-1.18.3}/.gitignore +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/LICENSE +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/README.md +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/__init__.py +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/_types.py +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/exceptions.py +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/generators.py +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/gis.py +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/mock_file.txt +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/mock_img.jpeg +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/py.typed +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/random_gen.py +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/recipe.py +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/timezone.py +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/model_bakery/utils.py +0 -0
- {model_bakery-1.18.2 → model_bakery-1.18.3}/pyproject.toml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: model-bakery
|
|
3
|
-
Version: 1.18.
|
|
3
|
+
Version: 1.18.3
|
|
4
4
|
Summary: Smart object creation facility for Django.
|
|
5
5
|
Project-URL: Homepage, https://github.com/model-bakers/model_bakery
|
|
6
6
|
Author-email: berin <bernardoxhc@gmail.com>, amureki <amureki@hey.com>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.18.3"
|
|
@@ -51,7 +51,7 @@ from .utils import (
|
|
|
51
51
|
|
|
52
52
|
if BAKER_CONTENTTYPES:
|
|
53
53
|
from django.contrib.contenttypes import models as contenttypes_models
|
|
54
|
-
from django.contrib.contenttypes.fields import GenericRelation
|
|
54
|
+
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
|
|
55
55
|
else:
|
|
56
56
|
contenttypes_models = None
|
|
57
57
|
GenericRelation = None
|
|
@@ -501,6 +501,7 @@ class Baker(Generic[M]):
|
|
|
501
501
|
) -> M:
|
|
502
502
|
one_to_many_keys = {}
|
|
503
503
|
auto_now_keys = {}
|
|
504
|
+
generic_foreign_keys = {}
|
|
504
505
|
|
|
505
506
|
for k in tuple(attrs.keys()):
|
|
506
507
|
field = getattr(self.model, k, None)
|
|
@@ -517,12 +518,15 @@ class Baker(Generic[M]):
|
|
|
517
518
|
):
|
|
518
519
|
auto_now_keys[k] = attrs[k]
|
|
519
520
|
|
|
521
|
+
if BAKER_CONTENTTYPES and isinstance(field, GenericForeignKey):
|
|
522
|
+
generic_foreign_keys[k] = attrs.pop(k)
|
|
523
|
+
|
|
520
524
|
instance = self.model(**attrs)
|
|
521
|
-
# m2m only works for persisted instances
|
|
522
525
|
if _commit:
|
|
523
526
|
instance.save(**_save_kwargs)
|
|
524
527
|
self._handle_one_to_many(instance, one_to_many_keys)
|
|
525
528
|
self._handle_m2m(instance)
|
|
529
|
+
self._handle_generic_foreign_keys(instance, generic_foreign_keys)
|
|
526
530
|
self._handle_auto_now(instance, auto_now_keys)
|
|
527
531
|
|
|
528
532
|
if _from_manager:
|
|
@@ -622,7 +626,7 @@ class Baker(Generic[M]):
|
|
|
622
626
|
|
|
623
627
|
if field.name not in self.model_attrs: # noqa: SIM102
|
|
624
628
|
if field.name not in self.rel_fields and (
|
|
625
|
-
field.
|
|
629
|
+
not field.fill_optional and field.null
|
|
626
630
|
):
|
|
627
631
|
return True
|
|
628
632
|
|
|
@@ -682,6 +686,10 @@ class Baker(Generic[M]):
|
|
|
682
686
|
}
|
|
683
687
|
make(through_model, _using=self._using, **base_kwargs)
|
|
684
688
|
|
|
689
|
+
def _handle_generic_foreign_keys(self, instance: Model, attrs: Dict[str, Any]):
|
|
690
|
+
for key, value in attrs.items():
|
|
691
|
+
setattr(instance, key, value)
|
|
692
|
+
|
|
685
693
|
def _remote_field(
|
|
686
694
|
self, field: Union[ForeignKey, OneToOneField]
|
|
687
695
|
) -> Union[OneToOneRel, ManyToOneRel]:
|
|
@@ -702,12 +710,16 @@ class Baker(Generic[M]):
|
|
|
702
710
|
model.
|
|
703
711
|
"""
|
|
704
712
|
is_content_type_fk = False
|
|
713
|
+
is_generic_fk = False
|
|
705
714
|
if BAKER_CONTENTTYPES:
|
|
706
715
|
is_content_type_fk = isinstance(field, ForeignKey) and issubclass(
|
|
707
716
|
self._remote_field(field).model, contenttypes_models.ContentType
|
|
708
717
|
)
|
|
718
|
+
is_generic_fk = isinstance(field, GenericForeignKey)
|
|
719
|
+
if is_generic_fk:
|
|
720
|
+
generator = self.type_mapping[GenericForeignKey]
|
|
709
721
|
# we only use default unless the field is overwritten in `self.rel_fields`
|
|
710
|
-
|
|
722
|
+
elif field.has_default() and field.name not in self.rel_fields:
|
|
711
723
|
if callable(field.default):
|
|
712
724
|
return field.default()
|
|
713
725
|
return field.default
|
|
@@ -7,8 +7,11 @@ default_contenttypes_mapping = {}
|
|
|
7
7
|
__all__ = ["BAKER_CONTENTTYPES", "default_contenttypes_mapping"]
|
|
8
8
|
|
|
9
9
|
if BAKER_CONTENTTYPES:
|
|
10
|
+
from django.contrib.contenttypes.fields import GenericForeignKey
|
|
10
11
|
from django.contrib.contenttypes.models import ContentType
|
|
11
12
|
|
|
12
13
|
from . import random_gen
|
|
13
14
|
|
|
14
15
|
default_contenttypes_mapping[ContentType] = random_gen.gen_content_type
|
|
16
|
+
# a small hack to generate random object for GenericForeignKey
|
|
17
|
+
default_contenttypes_mapping[GenericForeignKey] = random_gen.gen_content_type
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.18.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|