Показать ссылку на автора, используя пользовательскую модель (DRF) - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть пользовательская модель через AbstractBaseUser -

class CustomUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(_('email address'), unique=True)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    first_name = models.CharField(max_length=64)
    last_name = models.CharField(max_length=64)
    created = models.DateTimeField(default=timezone.now)
    image = models.ImageField(upload_to=get_user_dir_path,
                              default='user_placeholder/user_image_placeholder.png')
    points = models.IntegerField(default=0)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name', 'last_name']

    objects = CustomUserManager()

    def __str__(self):
        return self.email

Итак, у меня есть вторая модель Post, где я могу увидеть поданную "автор" -

author = models.ForeignKey(CustomUser, on_delete=models.CASCADE)

Затем я создал PostsViewSet. Проверьте мой сериализатор -

class PostSerializer(serializers.HyperlinkedModelSerializer):
    isFan = serializers.SerializerMethodField()
    id = serializers.ReadOnlyField()
    created = serializers.DateTimeField(format="%Y-%m-%d %H:%M", read_only=True)
    author = serializers.HyperlinkedRelatedField(view_name='user-detail', read_only=True)

    class Meta:
        model = Post
        read_only_fields = ('users',)
        fields = '__all__'

    def get_isFan(self, obj) -> bool:

        user = self.context.get('request').user
        if user.is_anonymous:
            return None
        else:
            return services.isFan(obj, user)

После этого, когда я создаю сообщение, я получаю ошибку -

Не удалось разрешить URL-адрес для связи с гиперссылкой, используя имя представления «user-detail». Возможно, вам не удалось включить соответствующую модель в API или неправильно настроить атрибут lookup_field в этом поле.

Как это исправить?

1 Ответ

0 голосов
/ 05 апреля 2020

serializers.HyperlinkedRelatedField пытается найти API URL, к которому можно получить указанного автора c, в соответствии с вашей схемой URL.

Возможно, вы неправильно настроили urls.py

...