independant sde app
This commit is contained in:
@@ -1,108 +0,0 @@
|
|||||||
# Generated by Django 4.2.6 on 2023-10-26 18:34
|
|
||||||
|
|
||||||
from django.db import migrations, models
|
|
||||||
import django.db.models.deletion
|
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
|
||||||
|
|
||||||
initial = True
|
|
||||||
|
|
||||||
dependencies = [
|
|
||||||
]
|
|
||||||
|
|
||||||
operations = [
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='SDECategory',
|
|
||||||
fields=[
|
|
||||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
|
||||||
('name', models.CharField()),
|
|
||||||
('published', models.BooleanField()),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='SDEGroup',
|
|
||||||
fields=[
|
|
||||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
|
||||||
('name', models.CharField()),
|
|
||||||
('published', models.BooleanField()),
|
|
||||||
('useBasePrice', models.BooleanField()),
|
|
||||||
('fittableNonSingleton', models.BooleanField()),
|
|
||||||
('anchored', models.BooleanField()),
|
|
||||||
('anchorable', models.BooleanField()),
|
|
||||||
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='groups', to='api.sdecategory')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='SDEIcon',
|
|
||||||
fields=[
|
|
||||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
|
||||||
('iconFile', models.CharField()),
|
|
||||||
('description', models.CharField()),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='SDEMarektGroup',
|
|
||||||
fields=[
|
|
||||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
|
||||||
('name', models.CharField()),
|
|
||||||
('description', models.CharField(default='')),
|
|
||||||
('hasTypes', models.BooleanField()),
|
|
||||||
('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='api.sdeicon')),
|
|
||||||
('parent_marketgroup', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child_marketgroups', to='api.sdemarektgroup')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='SDEMetaGroup',
|
|
||||||
fields=[
|
|
||||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
|
||||||
('name', models.CharField()),
|
|
||||||
('iconSuffix', models.CharField()),
|
|
||||||
('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='metagroups', to='api.sdeicon')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='SDEType',
|
|
||||||
fields=[
|
|
||||||
('id', models.IntegerField(primary_key=True, serialize=False)),
|
|
||||||
('name', models.CharField()),
|
|
||||||
('description', models.CharField()),
|
|
||||||
('published', models.BooleanField()),
|
|
||||||
('basePrice', models.FloatField()),
|
|
||||||
('volume', models.FloatField()),
|
|
||||||
('portionSize', models.IntegerField()),
|
|
||||||
('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='types', to='api.sdegroup')),
|
|
||||||
('icon', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='types', to='api.sdeicon')),
|
|
||||||
('marketgroup', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='types', to='api.sdemarektgroup')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.CreateModel(
|
|
||||||
name='SDETypeMaterial',
|
|
||||||
fields=[
|
|
||||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
||||||
('quantity', models.IntegerField()),
|
|
||||||
('material_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='typematerials_of', to='api.sdetype')),
|
|
||||||
('type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='typematerials', to='api.sdetype')),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='sdetype',
|
|
||||||
name='materials',
|
|
||||||
field=models.ManyToManyField(related_name='material_of', through='api.SDETypeMaterial', to='api.sdetype'),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='sdetype',
|
|
||||||
name='metagroup',
|
|
||||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='types', to='api.sdemetagroup'),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='sdegroup',
|
|
||||||
name='icon',
|
|
||||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='groups', to='api.sdeicon'),
|
|
||||||
),
|
|
||||||
migrations.AddField(
|
|
||||||
model_name='sdecategory',
|
|
||||||
name='icon',
|
|
||||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='categories', to='api.sdeicon'),
|
|
||||||
),
|
|
||||||
]
|
|
||||||
@@ -1,4 +1,2 @@
|
|||||||
from django.db import models
|
|
||||||
from .models_esi import *
|
|
||||||
from .models_sde import *
|
|
||||||
|
|
||||||
|
# models
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
from django.db import models
|
|
||||||
|
|
||||||
21
api/templates/redoc.html
Normal file
21
api/templates/redoc.html
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>ReDoc</title>
|
||||||
|
<!-- needed for adaptive design -->
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,700|Roboto:300,400,700" rel="stylesheet">
|
||||||
|
<!-- ReDoc doesn't change outer page styles -->
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<redoc spec-url='{% url schema_url %}'></redoc>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js"> </script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
28
api/templates/swagger-ui.html
Normal file
28
api/templates/swagger-ui.html
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Swagger</title>
|
||||||
|
<meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" type="text/css" href="//unpkg.com/swagger-ui-dist@3/swagger-ui.css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="swagger-ui"></div>
|
||||||
|
<script src="//unpkg.com/swagger-ui-dist@3/swagger-ui-bundle.js"></script>
|
||||||
|
<script>
|
||||||
|
const ui = SwaggerUIBundle({
|
||||||
|
url: "{% url schema_url %}",
|
||||||
|
dom_id: '#swagger-ui',
|
||||||
|
presets: [
|
||||||
|
SwaggerUIBundle.presets.apis,
|
||||||
|
SwaggerUIBundle.SwaggerUIStandalonePreset
|
||||||
|
],
|
||||||
|
layout: "BaseLayout",
|
||||||
|
requestInterceptor: (request) => {
|
||||||
|
request.headers['X-CSRFToken'] = "{{ csrf_token }}"
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
7
api/urls.py
Normal file
7
api/urls.py
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
from . import views
|
||||||
|
from django.urls import include, path
|
||||||
|
from rest_framework import routers
|
||||||
|
|
||||||
|
router = routers.DefaultRouter()
|
||||||
|
router.register(r'users', views.UserViewSet)
|
||||||
|
router.register(r'groups', views.GroupViewSet)
|
||||||
@@ -11,6 +11,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./mabras:/app/mabras
|
- ./mabras:/app/mabras
|
||||||
- ./api:/app/api
|
- ./api:/app/api
|
||||||
|
- ./sde:/app/sde
|
||||||
- ./manage.py:/app/manage.py
|
- ./manage.py:/app/manage.py
|
||||||
command: sh -c "python manage.py makemigrations && python manage.py migrate"
|
command: sh -c "python manage.py makemigrations && python manage.py migrate"
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -27,8 +28,9 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./mabras:/app/mabras
|
- ./mabras:/app/mabras
|
||||||
- ./api:/app/api
|
- ./api:/app/api
|
||||||
|
- ./sde:/app/sde
|
||||||
- ./manage.py:/app/manage.py
|
- ./manage.py:/app/manage.py
|
||||||
- ./static_eve:/app/static_eve
|
# - ./static_eve:/app/static_eve
|
||||||
command: ["uvicorn", "mabras.asgi:application", "--host", "0.0.0.0", "--port", "8000", "--reload"]
|
command: ["uvicorn", "mabras.asgi:application", "--host", "0.0.0.0", "--port", "8000", "--reload"]
|
||||||
depends_on:
|
depends_on:
|
||||||
redis:
|
redis:
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ REST_FRAMEWORK = {
|
|||||||
|
|
||||||
INSTALLED_APPS = [
|
INSTALLED_APPS = [
|
||||||
'api',
|
'api',
|
||||||
|
'sde',
|
||||||
'django.contrib.admin',
|
'django.contrib.admin',
|
||||||
'django.contrib.auth',
|
'django.contrib.auth',
|
||||||
'django.contrib.contenttypes',
|
'django.contrib.contenttypes',
|
||||||
|
|||||||
@@ -14,25 +14,30 @@ Including another URLconf
|
|||||||
1. Import the include() function: from django.urls import include, path
|
1. Import the include() function: from django.urls import include, path
|
||||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||||
"""
|
"""
|
||||||
from django.contrib import admin
|
|
||||||
from django.urls import include, path
|
from django.urls import include, path
|
||||||
from rest_framework import routers
|
from rest_framework import routers
|
||||||
from api import views, views_sde
|
from rest_framework.schemas import get_schema_view
|
||||||
|
from django.views.generic import TemplateView
|
||||||
router = routers.DefaultRouter()
|
from sde.urls import router as sde_router
|
||||||
router.register(r'users', views.UserViewSet)
|
from api.urls import router as api_router
|
||||||
router.register(r'groups', views.GroupViewSet)
|
|
||||||
router.register(r'sde/icons', views_sde.SDEIconViewSet)
|
|
||||||
router.register(r'sde/categories', views_sde.SDECategoryViewSet)
|
|
||||||
router.register(r'sde/groups', views_sde.SDEGroupViewSet)
|
|
||||||
router.register(r'sde/marketgroups', views_sde.SDEMarketGroupViewSet)
|
|
||||||
router.register(r'sde/metagroups', views_sde.SDEMetaGroupViewSet)
|
|
||||||
router.register(r'sde/types', views_sde.SDETypeViewSet)
|
|
||||||
router.register(r'sde/typematerials', views_sde.SDETypeMaterialViewSet)
|
|
||||||
|
|
||||||
# Wire up our API using automatic URL routing.
|
# Wire up our API using automatic URL routing.
|
||||||
# Additionally, we include login URLs for the browsable API.
|
# Additionally, we include login URLs for the browsable API.
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', include(router.urls)),
|
path('', include(api_router.urls)),
|
||||||
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
|
path('sde/', include(sde_router.urls)),
|
||||||
]
|
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
|
||||||
|
path('openapi/', get_schema_view(
|
||||||
|
title="Mabras",
|
||||||
|
description="API for EvEal",
|
||||||
|
version="0.0.9"
|
||||||
|
), name='openapi-schema'),
|
||||||
|
path('swagger-ui/', TemplateView.as_view(
|
||||||
|
template_name='swagger-ui.html',
|
||||||
|
extra_context={'schema_url': 'openapi-schema'}
|
||||||
|
), name='swagger-ui'),
|
||||||
|
path('redoc/', TemplateView.as_view(
|
||||||
|
template_name='redoc.html',
|
||||||
|
extra_context={'schema_url': 'openapi-schema'}
|
||||||
|
), name='redoc'),
|
||||||
|
]
|
||||||
|
|||||||
@@ -6,3 +6,5 @@ uvicorn[standard]
|
|||||||
psycopg[binary]
|
psycopg[binary]
|
||||||
redis
|
redis
|
||||||
esy
|
esy
|
||||||
|
pyyaml
|
||||||
|
uritemplate
|
||||||
|
|||||||
6
sde/apps.py
Normal file
6
sde/apps.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class SdeConfig(AppConfig):
|
||||||
|
default_auto_field = 'django.db.models.BigAutoField'
|
||||||
|
name = 'sde'
|
||||||
0
sde/management/commands/__init__.py
Normal file
0
sde/management/commands/__init__.py
Normal file
@@ -1,5 +1,5 @@
|
|||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
from api.models import *
|
from sde.models import *
|
||||||
import yaml
|
import yaml
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
0
sde/migrations/__init__.py
Normal file
0
sde/migrations/__init__.py
Normal file
@@ -1,52 +1,54 @@
|
|||||||
from api.models_sde import *
|
from sde.models import *
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
|
||||||
class SDEIconSerializer(serializers.HyperlinkedModelSerializer):
|
class SDEIconSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SDEIcon
|
model = SDEIcon
|
||||||
# fields = ['id', 'iconFile', 'description']
|
# fields = ['id', 'iconFile', 'description']
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
class SDECategorySerializer(serializers.HyperlinkedModelSerializer):
|
class SDECategorySerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SDECategory
|
model = SDECategory
|
||||||
# fields = ['id', 'icon', 'name', 'published']
|
# fields = ['id', 'icon', 'name', 'published']
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
class SDEGroupSerializer(serializers.HyperlinkedModelSerializer):
|
class SDEGroupSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SDEGroup
|
model = SDEGroup
|
||||||
# fields = ['id', 'category', 'name', 'published', 'useBasePrice', 'fittableNonSingleton', 'anchored', 'anchorable', 'icon']
|
# fields = ['id', 'category', 'name', 'published', 'useBasePrice', 'fittableNonSingleton', 'anchored', 'anchorable', 'icon']
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
class SDEMarektGroupSerializer(serializers.HyperlinkedModelSerializer):
|
class SDEMarektGroupSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SDEMarektGroup
|
model = SDEMarektGroup
|
||||||
# fields = ['id', 'icon', 'name', 'description', 'hasTypes', 'parent_marketgroup']
|
# fields = ['id', 'icon', 'name', 'description', 'hasTypes', 'parent_marketgroup']
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
class SDEMetaGroupSerializer(serializers.HyperlinkedModelSerializer):
|
class SDEMetaGroupSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SDEMetaGroup
|
model = SDEMetaGroup
|
||||||
# fields = ['id', 'icon', 'name', 'iconSuffix']
|
# fields = ['id', 'icon', 'name', 'iconSuffix']
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
class SDETypeSerializer(serializers.HyperlinkedModelSerializer):
|
class SDETypeMaterialSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = SDETypeMaterial
|
||||||
|
# fields = ['type', 'material', 'quantity']
|
||||||
|
# fields = "__all__"
|
||||||
|
exclude = ['id', 'type']
|
||||||
|
|
||||||
|
|
||||||
|
class SDETypeSerializer(serializers.ModelSerializer):
|
||||||
|
typematerials = SDETypeMaterialSerializer(many=True, read_only=True)
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SDEType
|
model = SDEType
|
||||||
# fields = ['id', 'group', 'marketgroup', 'metagroup', 'name', 'description', 'published', 'basePrice', 'icon', 'volume', 'portionSize', 'materials']
|
# fields = ['id', 'group', 'marketgroup', 'metagroup', 'name', 'description', 'published', 'basePrice', 'icon', 'volume', 'portionSize', 'materials']
|
||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
|
|
||||||
|
|
||||||
class SDETypeMaterialSerializer(serializers.HyperlinkedModelSerializer):
|
|
||||||
class Meta:
|
|
||||||
model = SDETypeMaterial
|
|
||||||
# fields = ['type', 'material', 'quantity']
|
|
||||||
fields = "__all__"
|
|
||||||
|
|
||||||
12
sde/urls.py
Normal file
12
sde/urls.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
from . import views
|
||||||
|
from django.urls import include, path
|
||||||
|
from rest_framework import routers
|
||||||
|
|
||||||
|
router = routers.DefaultRouter()
|
||||||
|
router.register(r'icons', views.SDEIconViewSet)
|
||||||
|
router.register(r'categories', views.SDECategoryViewSet)
|
||||||
|
router.register(r'groups', views.SDEGroupViewSet)
|
||||||
|
router.register(r'marketgroups', views.SDEMarketGroupViewSet)
|
||||||
|
router.register(r'metagroups', views.SDEMetaGroupViewSet)
|
||||||
|
router.register(r'types', views.SDETypeViewSet)
|
||||||
|
router.register(r'typematerials', views.SDETypeMaterialViewSet)
|
||||||
@@ -1,45 +1,44 @@
|
|||||||
from api.models_sde import *
|
from sde.serializers import *
|
||||||
from api.serializers_sde import *
|
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
|
|
||||||
|
|
||||||
class SDEIconViewSet(viewsets.ModelViewSet):
|
class SDEIconViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
queryset = SDEIcon.objects.all()
|
queryset = SDEIcon.objects.all()
|
||||||
serializer_class = SDEIconSerializer
|
serializer_class = SDEIconSerializer
|
||||||
# permission_classes = [permissions.IsAuthenticated]
|
# permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
|
|
||||||
class SDECategoryViewSet(viewsets.ModelViewSet):
|
class SDECategoryViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
queryset = SDECategory.objects.all()
|
queryset = SDECategory.objects.all()
|
||||||
serializer_class = SDECategorySerializer
|
serializer_class = SDECategorySerializer
|
||||||
# permission_classes = [permissions.IsAuthenticated]
|
# permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
|
|
||||||
class SDEGroupViewSet(viewsets.ModelViewSet):
|
class SDEGroupViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
queryset = SDEGroup.objects.all()
|
queryset = SDEGroup.objects.all()
|
||||||
serializer_class = SDEGroupSerializer
|
serializer_class = SDEGroupSerializer
|
||||||
# permission_classes = [permissions.IsAuthenticated]
|
# permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
|
|
||||||
class SDEMarketGroupViewSet(viewsets.ModelViewSet):
|
class SDEMarketGroupViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
queryset = SDEMarektGroup.objects.all()
|
queryset = SDEMarektGroup.objects.all()
|
||||||
serializer_class = SDEMarektGroupSerializer
|
serializer_class = SDEMarektGroupSerializer
|
||||||
# permission_classes = [permissions.IsAuthenticated]
|
# permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
|
|
||||||
class SDEMetaGroupViewSet(viewsets.ModelViewSet):
|
class SDEMetaGroupViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
queryset = SDEMetaGroup.objects.all()
|
queryset = SDEMetaGroup.objects.all()
|
||||||
serializer_class = SDEMetaGroupSerializer
|
serializer_class = SDEMetaGroupSerializer
|
||||||
# permission_classes = [permissions.IsAuthenticated]
|
# permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
|
|
||||||
class SDETypeViewSet(viewsets.ModelViewSet):
|
class SDETypeViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
queryset = SDEType.objects.all()
|
queryset = SDEType.objects.all()
|
||||||
serializer_class = SDETypeSerializer
|
serializer_class = SDETypeSerializer
|
||||||
# permission_classes = [permissions.IsAuthenticated]
|
# permission_classes = [permissions.IsAuthenticated]
|
||||||
|
|
||||||
|
|
||||||
class SDETypeMaterialViewSet(viewsets.ModelViewSet):
|
class SDETypeMaterialViewSet(viewsets.ReadOnlyModelViewSet):
|
||||||
queryset = SDETypeMaterial.objects.all()
|
queryset = SDETypeMaterial.objects.all()
|
||||||
serializer_class = SDETypeMaterialSerializer
|
serializer_class = SDETypeMaterialSerializer
|
||||||
# permission_classes = [permissions.IsAuthenticated]
|
# permission_classes = [permissions.IsAuthenticated]
|
||||||
Reference in New Issue
Block a user