Django Ошибка: "'type' object is not iterable"

Я начинающий Django и хочу написать сайт для моего друга, который работает художником. Я хотел написать rest-api, чтобы иметь доступ к моделям в моем фронтенде (который я еще не реализовал). Когда я пытаюсь вызвать поддомен для модели, которую я написал, я получаю ошибку "'type' object is not iterable". Я хотел сделать так, чтобы зарегистрированные пользователи могли оставлять отзывы, поэтому я написал класс Feedback. Я также реализовал FeedbackSerializer и FeedbackView. Я пытался использовать chatgpt, но это не помогло. в stackoverflow также не было подобных ошибок, как та, что возникла у меня.

поэтому я пришел сюда за помощью. Может быть, вы, ребята, сможете мне помочь.

Вот что я придумал на данный момент:

# api/models.py
class Feedback(models.Model):
    title = models.CharField(max_length=1000, null=False, blank=False)
    feedback = models.TextField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    image = models.FileField(
        upload_to="image", default="default/default-user.jpg", null=True, blank=True)
    rating = models.IntegerField(
        validators=[MinValueValidator(1), MaxValueValidator(5)], null=False, blank=False)

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        super(Feedback, self).save(*args, **kwargs)
# api/serializers.py
class FeedbackSerializer(serializers.ModelSerializer):

    class Meta:
        model = api_models.Feedback
        fields = "__all__"
# api/views.py
class FeedbackView(generics.RetrieveAPIView):
    permission_classes = [AllowAny]
    serializer_class = api_serializer.FeedbackSerializer

    def get_object(self):
        feedback_id = self.kwargs["feedback_id"]
        try:
            feedback = api_models.Feedback.objects.get(id=feedback_id)
        except api_models.Feedback.DoesNotExist:
            raise Http404("Feedback not found.")
        return feedback
# api/urls.py
urlpatterns = [
    path("feedback/<feedback_id>/", api_views.FeedbackView.as_view()),
]

Я ожидал, что я могу просто вызвать поддомен /feedback/1/ и он покажет мне API представление для каждого отзыва. Я создал отзыв через страницу администратора, но почему-то он не работает так, как ожидалось

При использовании механизмов аутентификации DRF, приведенные ниже настройки должны быть Python Iterable, иначе get_authenticators() не сможет настроить вашу процедуру аутентификации.

assert isinstance(settings.REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'], collections.abc.Iterable)

Если заключить AUTHENTICATION_CLASS в круглые скобки, например:

settings.REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] = (•••)

Это не одноэлементная tuple, как вы могли бы ожидать, а просто считается еще одной переменной Python. Одноэлементный tuple - это литерал, такой как: (•••,). Следовательно, правильный код должен быть таким:

settings.REST_FRAMEWORK['DEFAULT_AUTHENTICATION_CLASSES'] = (•••,)

Обычно я рекомендую использовать list вместо tuple, когда это возможно.

Вернуться на верх