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
, когда это возможно.