mirror of
https://github.com/HamzaSha1/zod-backend.git
synced 2025-07-14 17:45:46 +00:00
web_admin module added, api for article created
This commit is contained in:
0
web_admin/__init__.py
Normal file
0
web_admin/__init__.py
Normal file
27
web_admin/admin.py
Normal file
27
web_admin/admin.py
Normal file
@ -0,0 +1,27 @@
|
||||
from django.contrib import admin
|
||||
|
||||
from web_admin.models import Article, ArticleCard, ArticleSurvey, SurveyOption
|
||||
|
||||
|
||||
@admin.register(Article)
|
||||
class ArticleAdmin(admin.ModelAdmin):
|
||||
"""Junior Points Admin"""
|
||||
list_display = ['id', 'title', 'description', 'is_published']
|
||||
|
||||
|
||||
@admin.register(ArticleCard)
|
||||
class ArticleAdmin(admin.ModelAdmin):
|
||||
"""Junior Points Admin"""
|
||||
list_display = ['id', 'article', 'title', 'description', 'image']
|
||||
|
||||
|
||||
@admin.register(ArticleSurvey)
|
||||
class ArticleAdmin(admin.ModelAdmin):
|
||||
"""Junior Points Admin"""
|
||||
list_display = ['id', 'article', 'question', 'points']
|
||||
|
||||
|
||||
@admin.register(SurveyOption)
|
||||
class ArticleAdmin(admin.ModelAdmin):
|
||||
"""Junior Points Admin"""
|
||||
list_display = ['id', 'survey', 'option', 'is_answer']
|
6
web_admin/apps.py
Normal file
6
web_admin/apps.py
Normal file
@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class WebAdminConfig(AppConfig):
|
||||
default_auto_field = 'django.db.models.BigAutoField'
|
||||
name = 'web_admin'
|
60
web_admin/migrations/0001_initial.py
Normal file
60
web_admin/migrations/0001_initial.py
Normal file
@ -0,0 +1,60 @@
|
||||
# Generated by Django 4.2.2 on 2023-07-13 13:01
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Article',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('description', models.TextField()),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('is_published', models.BooleanField(default=False)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ArticleSurvey',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('question', models.CharField(max_length=255)),
|
||||
('points', models.IntegerField()),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web_admin.article')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='SurveyOption',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('option', models.CharField(max_length=255)),
|
||||
('is_answer', models.BooleanField(default=False)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('survey', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web_admin.articlesurvey')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ArticleCard',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('description', models.TextField()),
|
||||
('image', models.ImageField(upload_to='card_images/')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='web_admin.article')),
|
||||
],
|
||||
),
|
||||
]
|
0
web_admin/migrations/__init__.py
Normal file
0
web_admin/migrations/__init__.py
Normal file
54
web_admin/models.py
Normal file
54
web_admin/models.py
Normal file
@ -0,0 +1,54 @@
|
||||
"""
|
||||
web_admin model file
|
||||
"""
|
||||
# django imports
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Article(models.Model):
|
||||
title = models.CharField(max_length=255)
|
||||
description = models.TextField()
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
is_published = models.BooleanField(default=False)
|
||||
|
||||
def __str__(self):
|
||||
"""Return title"""
|
||||
return f'{self.id} | {self.title}'
|
||||
|
||||
|
||||
class ArticleCard(models.Model):
|
||||
article = models.ForeignKey(Article, on_delete=models.CASCADE)
|
||||
title = models.CharField(max_length=255)
|
||||
description = models.TextField()
|
||||
image = models.ImageField(upload_to='card_images/')
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
"""Return title"""
|
||||
return f'{self.id} | {self.title}'
|
||||
|
||||
|
||||
class ArticleSurvey(models.Model):
|
||||
article = models.ForeignKey(Article, on_delete=models.CASCADE)
|
||||
question = models.CharField(max_length=255)
|
||||
points = models.IntegerField()
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
"""Return title"""
|
||||
return f'{self.id} | {self.article}'
|
||||
|
||||
|
||||
class SurveyOption(models.Model):
|
||||
survey = models.ForeignKey(ArticleSurvey, on_delete=models.CASCADE)
|
||||
option = models.CharField(max_length=255)
|
||||
is_answer = models.BooleanField(default=False)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
"""Return title"""
|
||||
return f'{self.id} | {self.survey}'
|
55
web_admin/serializers.py
Normal file
55
web_admin/serializers.py
Normal file
@ -0,0 +1,55 @@
|
||||
"""
|
||||
web_admin serializers file
|
||||
"""
|
||||
from rest_framework import serializers
|
||||
|
||||
from web_admin.models import Article, ArticleCard, SurveyOption, ArticleSurvey
|
||||
|
||||
|
||||
class ArticleCardSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = ArticleCard
|
||||
fields = ('title', 'description')
|
||||
|
||||
|
||||
class SurveyOptionSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = SurveyOption
|
||||
fields = ('option', 'is_answer')
|
||||
|
||||
|
||||
class ArticleSurveySerializer(serializers.ModelSerializer):
|
||||
options = SurveyOptionSerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
model = ArticleSurvey
|
||||
fields = ('question', 'points', 'options')
|
||||
|
||||
|
||||
class ArticleSerializer(serializers.ModelSerializer):
|
||||
article_cards = ArticleCardSerializer(many=True)
|
||||
article_survey = ArticleSurveySerializer(many=True)
|
||||
|
||||
class Meta:
|
||||
"""
|
||||
meta class
|
||||
"""
|
||||
model = Article
|
||||
fields = ('title', 'description', 'article_cards', 'article_survey')
|
||||
|
||||
def create(self, validated_data):
|
||||
article_cards = validated_data.pop('article_cards')
|
||||
article_survey = validated_data.pop('article_survey')
|
||||
|
||||
article = Article.objects.create(**validated_data)
|
||||
|
||||
for card in article_cards:
|
||||
ArticleCard.objects.create(article=article, **card)
|
||||
|
||||
for survey in article_survey:
|
||||
options = survey.pop('options')
|
||||
survey_obj = ArticleSurvey.objects.create(article=article, **survey)
|
||||
for option in options:
|
||||
SurveyOption.objects.create(survey=survey_obj, **option)
|
||||
|
||||
return article
|
3
web_admin/tests.py
Normal file
3
web_admin/tests.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
16
web_admin/urls.py
Normal file
16
web_admin/urls.py
Normal file
@ -0,0 +1,16 @@
|
||||
"""
|
||||
web_admin urls file
|
||||
"""
|
||||
# django imports
|
||||
from django.urls import path, include
|
||||
from rest_framework import routers
|
||||
|
||||
from web_admin.views import ArticleViewSet
|
||||
|
||||
router = routers.SimpleRouter()
|
||||
|
||||
router.register('article', ArticleViewSet, basename='article')
|
||||
|
||||
urlpatterns = [
|
||||
path('api/v1/', include(router.urls)),
|
||||
]
|
23
web_admin/views.py
Normal file
23
web_admin/views.py
Normal file
@ -0,0 +1,23 @@
|
||||
"""
|
||||
web_admin views file
|
||||
"""
|
||||
# django imports
|
||||
from rest_framework.viewsets import GenericViewSet, mixins
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status
|
||||
|
||||
# local imports
|
||||
from web_admin.models import Article
|
||||
from web_admin.serializers import ArticleSerializer
|
||||
|
||||
|
||||
class ArticleViewSet(GenericViewSet, mixins.CreateModelMixin):
|
||||
serializer_class = ArticleSerializer
|
||||
permission_classes = []
|
||||
queryset = Article.objects.all()
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
serializer = self.serializer_class(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return Response({'message': "created"}, status=status.HTTP_201_CREATED)
|
@ -56,6 +56,7 @@ INSTALLED_APPS = [
|
||||
'account',
|
||||
'junior',
|
||||
'guardian',
|
||||
'web_admin',
|
||||
# 'social_django'
|
||||
]
|
||||
|
||||
@ -221,3 +222,5 @@ ALIYUN_OSS_REGION = os.getenv('ALIYUN_OSS_REGION')
|
||||
STATIC_URL = 'static/'
|
||||
STATIC_ROOT = 'static'
|
||||
|
||||
MEDIA_URL = "/media/"
|
||||
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'media')
|
||||
|
@ -30,4 +30,5 @@ urlpatterns = [
|
||||
path('', include(('account.urls', 'account'), namespace='account')),
|
||||
path('', include('guardian.urls')),
|
||||
path('', include(('junior.urls', 'junior'), namespace='junior')),
|
||||
path('', include(('web_admin.urls', 'web_admin'), namespace='web_admin')),
|
||||
]
|
||||
|
Reference in New Issue
Block a user