|  | 
| 1 |  | -from decimal import Decimal | 
| 2 |  | - | 
| 3 | 1 | from django.core.exceptions import ValidationError | 
|  | 2 | +from django.db import models | 
| 4 | 3 | from django.test import SimpleTestCase, TestCase | 
|  | 4 | +from django.test.utils import isolate_apps | 
| 5 | 5 | 
 | 
| 6 | 6 | from django_mongodb_backend.fields import EmbeddedModelField | 
| 7 | 7 | 
 | 
| 8 | 8 | from .models import ( | 
| 9 | 9 |     Address, | 
| 10 | 10 |     Author, | 
| 11 | 11 |     Book, | 
| 12 |  | -    DecimalKey, | 
| 13 |  | -    DecimalParent, | 
| 14 | 12 |     EmbeddedModel, | 
| 15 | 13 |     EmbeddedModelFieldModel, | 
| 16 |  | -    Target, | 
| 17 | 14 | ) | 
| 18 | 15 | 
 | 
| 19 | 16 | 
 | 
| @@ -82,19 +79,6 @@ def test_pre_save(self): | 
| 82 | 79 |         self.assertEqual(obj.simple.auto_now_add, auto_now_add) | 
| 83 | 80 |         self.assertGreater(obj.simple.auto_now, auto_now_two) | 
| 84 | 81 | 
 | 
| 85 |  | -    def test_foreign_key_in_embedded_object(self): | 
| 86 |  | -        simple = EmbeddedModel(some_relation=Target.objects.create(index=1)) | 
| 87 |  | -        obj = EmbeddedModelFieldModel.objects.create(simple=simple) | 
| 88 |  | -        simple = EmbeddedModelFieldModel.objects.get().simple | 
| 89 |  | -        self.assertNotIn("some_relation", simple.__dict__) | 
| 90 |  | -        self.assertIsInstance(simple.__dict__["some_relation_id"], type(obj.id)) | 
| 91 |  | -        self.assertIsInstance(simple.some_relation, Target) | 
| 92 |  | - | 
| 93 |  | -    def test_embedded_field_with_foreign_conversion(self): | 
| 94 |  | -        decimal = DecimalKey.objects.create(decimal=Decimal("1.5")) | 
| 95 |  | -        decimal_parent = DecimalParent.objects.create(child=decimal) | 
| 96 |  | -        EmbeddedModelFieldModel.objects.create(decimal_parent=decimal_parent) | 
| 97 |  | - | 
| 98 | 82 | 
 | 
| 99 | 83 | class QueryingTests(TestCase): | 
| 100 | 84 |     @classmethod | 
| @@ -134,3 +118,21 @@ def test_nested(self): | 
| 134 | 118 |             author=Author(name="Shakespeare", age=55, address=Address(city="NYC", state="NY")) | 
| 135 | 119 |         ) | 
| 136 | 120 |         self.assertCountEqual(Book.objects.filter(author__address__city="NYC"), [obj]) | 
|  | 121 | + | 
|  | 122 | + | 
|  | 123 | +@isolate_apps("model_fields_") | 
|  | 124 | +class CheckTests(SimpleTestCase): | 
|  | 125 | +    def test_no_relational_fields(self): | 
|  | 126 | +        class Target(models.Model): | 
|  | 127 | +            key = models.ForeignKey("MyModel", models.CASCADE) | 
|  | 128 | + | 
|  | 129 | +        class MyModel(models.Model): | 
|  | 130 | +            field = EmbeddedModelField(Target) | 
|  | 131 | + | 
|  | 132 | +        model = MyModel() | 
|  | 133 | +        errors = model.check() | 
|  | 134 | +        self.assertEqual(len(errors), 1) | 
|  | 135 | +        # The inner CharField has a non-positive max_length. | 
|  | 136 | +        self.assertEqual(errors[0].id, "django_mongodb.embedded_model.E001") | 
|  | 137 | +        msg = errors[0].msg | 
|  | 138 | +        self.assertEqual(msg, "Embedded models cannot have relational fields.") | 
0 commit comments