def test_get_relation_kwargs_for_unique_fk_field_(self):
     relation_info = RelationInfo(
         model_field=self.Book._meta.get_field('publisher'),
         related_model=self.Book,
         to_many=True,
         to_field=self.Publisher._meta.get_field('id'),
         has_through_model=False
     )
     kwargs = get_relation_kwargs('publisher', relation_info)
     validators = kwargs.pop('validators')
     self.assertEqual(
         kwargs,
         {
             'allow_empty': False,
             'label': 'Publisher',
             'many': True,
             'queryset': self.Book._default_manager,
             'to_field': self.Publisher._meta.get_field('id'),
             'view_name': 'book-detail'
         }
     )
     self.assertEqual(len(validators), 1)
     self.assertIsInstance(validators[0], UniqueValidator)
     self.assertEqual(
         validators[0].queryset,
         self.Book._default_manager
     )
 def test_get_relation_kwargs_for_reverse_m2m_field(self):
     relation_info = RelationInfo(
         model_field=self.Author._meta.get_field('id'),
         related_model=self.Author,
         to_many=True,
         to_field=self.Book._meta.get_field('id'),
         has_through_model=True
     )
     self.assertEqual(
         get_relation_kwargs('id', relation_info),
         {
             'label': 'Id',
             'many': True,
             'read_only': True,
             'to_field': self.Book._meta.get_field('id'),
             'view_name': 'author-detail'
         }
     )
Beispiel #3
0
    def build_relational_field(self, *args, **kwargs):
        """
        Create fields for forward and reverse relationships.
        """
        field_name, relation_info = args
        field_class = self.serializer_related_field
        field_kwargs = get_relation_kwargs(field_name, relation_info)

        to_field = field_kwargs.pop('to_field', None)
        if to_field and not relation_info.related_model._meta.get_field(to_field).primary_key:  # NOQA
            field_kwargs['slug_field'] = to_field
            field_class = self.serializer_related_to_field

        # `view_name` is only valid for hyperlinked relationships
        if not issubclass(field_class, HyperlinkedRelatedField):
            field_kwargs.pop('view_name', None)

        return field_class, field_kwargs
Beispiel #4
0
    def build_relational_field(self, *args, **kwargs):
        """
        Create fields for forward and reverse relationships.
        """
        field_name, relation_info = args
        field_class = self.serializer_related_field
        field_kwargs = get_relation_kwargs(field_name, relation_info)

        to_field = field_kwargs.pop('to_field', None)
        if to_field and not relation_info.related_model._meta.get_field(
                to_field).primary_key:  # NOQA
            field_kwargs['slug_field'] = to_field
            field_class = self.serializer_related_to_field

        # `view_name` is only valid for hyperlinked relationships
        if not issubclass(field_class, HyperlinkedRelatedField):
            field_kwargs.pop('view_name', None)

        return field_class, field_kwargs
 def test_get_relation_kwargs_for_nullable_fk_field_with_validators(self):
     model_field = self.PublisherAddress._meta.get_field('publisher')
     relation_info = RelationInfo(
         model_field=model_field,
         related_model=self.PublisherAddress,
         to_many=True,
         to_field=self.Publisher._meta.get_field('id'),
         has_through_model=False
     )
     self.assertEqual(
         get_relation_kwargs('publisher', relation_info),
         {
             'allow_null': True,
             'label': 'Publisher',
             'many': True,
             'queryset': self.PublisherAddress._default_manager,
             'required': False,
             'to_field': self.Publisher._meta.get_field('id'),
             'validators': model_field.validators,
             'view_name': 'publisheraddress-detail'
         }
     )