Skip to content

Nested Relations get_url patch #67

Open
@alexmakeev

Description

@alexmakeev

Привет, перепробовал кучу вещей в инете для nested drf routing, остановился на твоем пакете.
У тебя отсутствует генератор полей-ссылок на nested-urls (у базового не хватает kwargs для reverse).

class HyperlinkedNestedIdentityField(HyperlinkedIdentityField):

    def __init__(self, view_name=None, additional_reverse_kwargs={}, **kwargs):
        self.additional_reverse_kwargs = additional_reverse_kwargs
        super(HyperlinkedNestedIdentityField, self).__init__(view_name, **kwargs)

    def get_url(self, obj, view_name, request, format):
        """
        Given an object, return the URL that hyperlinks to the object.

        May raise a `NoReverseMatch` if the `view_name` and `lookup_field`
        attributes are not configured to correctly match the URL conf.
        """
        # Unsaved objects will not yet have a valid URL.
        if obj.pk is None:
            return None

        kwargs = {}
        for k, v in self.additional_reverse_kwargs.iteritems():
            kwargs[k] = getattr(obj, v, v)
        kwargs.update({self.lookup_url_kwarg: getattr(obj, self.lookup_field)})
        return self.reverse(view_name, kwargs=kwargs, request=request, format=format)

Пример использования:

class MealRecordSerializer(serializers.HyperlinkedModelSerializer):
    url = HyperlinkedNestedIdentityField(view_name='mealrecord-detail', read_only=True,
                                         additional_reverse_kwargs={"parent_lookup_user_id": "user_id"})

    class Meta:
        model = MealRecord
        fields = ('id', 'url', 'user', 'date', 'time', 'title', 'calories_count')

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions