본문 바로가기
AI 웹개발반

[TIL] 알게된 것 정리 및 구현한 코드 Error 고치기

by 째깍단 2023. 6. 9.

새롭게 알게 된 것 

 

 

- 1 - 

 

views.py에 다른 곳에서 작성한 기능을 가져다 붙일때, 이름을 다르게 선언해주어야한다

views로 그대로 사용하면 해당 app에서 사용하는 views import와 겹치게 되어 호출되지 않는다!

 

from . import views
from feed import views as feedviews 
# as ~~로 원하는 이름을 적어넣는다

 

 

 

- 2 - 

 

url에도 name값을 인자로 받아 활용할 수 있다

 

헷갈렸던 점은 url에서 인스턴스를 보내줄때 이미 정해진 값이 들어가 있어야한다고 생각한 것

url에는 단순히 받아서 함수로 보내주는 것이고, 동작은 함수에서 필요한 것을 찾고 기능하도록 만드는 것임을 다시 짚고 가자!

 

path("<str:community_name>/list/",feedviews.FeedListView.as_view(),name="feed_list_view",),

 

class FeedListView(APIView):
    def get(self, request, community_name):
        community = Community.objects.get(title=community_name)

 

 

 

- 3 -

 

if문 대신 is_vaild에 옵션을 주어 True값을 받으면 다음 과정으로 넘어가도록 한다!

raise_exception

 

serializer.is_valid(raise_exception=True)

 

 

 

 

 

 

 

Today's Error

 

It is redundant to specify `source='category'` on field 'ReadOnlyField' in serializer 'FeedListSerializer', because it is the same as the field name. Remove the `source` keyword argument.

= 이미 잘 작동하고 있는 필드에 category = ReadOnlyField(source='category')를 붙여넣었기때문

 

➡ category = ReadOnlyField() 로 변경

 

 

 

 

 

❌ Assertion Error
Cannot call '.is_valid()' as no 'data=' keyword argument was passed when instantiating the serializer instance

= serializer 인스턴스를 만들 때 'data= ' 키워드가 누락됨

 

serializer = FeedSerializer(data = request.data)

 

 

 

 

 

❌AttributeError: Got AttributeError when attempting to get a value for field `user` on serializer `FeedListSerializer`.

The serializer field might be named incorrectly and not match any attribute or key on the `QuerySet` instance.

Original exception text was: 'QuerySet' object has no attribute 'user'.

= field user 를 찾을 수 없음. 

= FK관계로 받아온 내용이기 때문에 user를 찾을 수 없다고 나오는 것..

= filter로 찾았기 때문에 가져온 필드가 한 개여도 list에 담긴 QuerySet 형태여서 에서 당연히 필드를 찾을 수 없음!

 

➡ 해당하는 view의 serializer에 many=True 속성을 함께 입력

serializer = FeedListSerializer(feed_list, many=True)

 

여기서도 삽질을 꽤 했는데,  serializers.py에서 해결하려고 user = UserSerializer(many=True)를 넣어보고있었음..

 

 

 

 


    if user.is_subadmin != True or user.is_comuadmin != True:
       ^^^^^^^^^^^^^^^^
❌AttributeError: 'QuerySet' object has no attribute 'is_subadmin'

= 위와 비슷한 에러 발생, print 해보면 QuerySet 형태임을 알 수 있다

= 🐛 <QuerySet [<CommunityAdmin: CommunityAdmin object (1)>]>