Куда поместить код фреймворка Django rest в проекте Django?
Я хотел бы знать, куда/в какой файл я должен поместить набор DRF python кода в Django проекте. Вот почему/что происходит со мной сейчас.
Пока я пытаюсь перейти с базы данных sqlite по умолчанию на postgres, у меня возникла проблема;
$ IS_PRODUCTION=true python manage.py showmigrations
..
django.db.utils.ProgrammingError: relation "django_content_type" does not exist
LINE 1: ..."."app_label", "django_content_type"."model" FROM "django_co...
эта ошибка говорит мне relation "django_content_type" does not exist
, поэтому я проверил трассировку стека в ошибке;
..
File "/root/pg/django/snippetapp/app/urls.py", line 623, in PostViewSet
_content_type_id = ContentType.objects.get_for_model(Post).id
..
Похоже, что я получил ошибку, потому что у меня есть набор DRF скриптов на ./appname/urls.py
,
и я импортировал/использовал ContentType
, один из основных классов Django в файле;
поскольку кажется, что Django загружает верхний urls.py
файл на очень ранней стадии, а не занимается ContentType вещами.
Итак, я полагаю, что мне нужно переместить весь набор DRF, так куда же мне двигаться?
Но одно но, я полагаю, что мы urlpatterns
include
указываем урлы маршрутизаторов DRF как таковые:
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
router.register(r'posts', PostViewSet)
..
urlpatterns = [
path('api/', include(router.urls)),
..
Тогда не нужно ли нам также иметь DRF скрипты "перед" ./appname/urls.py
-> urlpatterns
...?
Спасибо.
Редактирование по требованию
Вот PostViewSet
, который содержит в себе импортированный ContentType
;
from django.contrib.contenttypes.models import ContentType
..
class PostViewSet(viewsets.ModelViewSet):
"""
default Post viewset
"""
_site_id = settings.SITE_ID
# e.g. 3
_content_type_id = ContentType.objects.get_for_model(Post).id
# e.g. 12
comment_count = Comment.objects.filter(content_type_id=_content_type_id).filter(site_id=_site_id).filter(
object_pk=OuterRef('pk')).order_by().annotate(
count=Func(F('id'), function='COUNT')).values("count")
comments = Comment.objects.filter(content_type_id=_content_type_id).filter(site_id=_site_id).filter(
object_pk=OuterRef('pk'))
queryset = Post.objects.all().annotate(
vote_count=Count('voters'),
comment_count=Count('comments'),
# gets the comment count
comment02_count=Subquery(comment_count),
# gets the last comment
comment_last=Subquery(comments.order_by("-submit_date").values("comment")[:1]),
).all()
serializer_class = PostSerializer
permission_classes = [GeneralUserObjectPerm,]
filter_backends = [filters.OrderingFilter, DynamicSearchFilter,]
pagination_class = StandardResultsSetPagination