Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
392f42a
Add button and categories
Aug 12, 2023
4dfb050
Changing the actions icon and adding preview
Aug 13, 2023
9906b28
change the comments
Aug 13, 2023
947c0a7
change the title of action and remove the option when touching the title
Aug 14, 2023
ee14c62
change the entry_list
Aug 15, 2023
bacf968
Beta, datatable in the Blog
Aug 19, 2023
7f54399
Add the datatable.
Aug 19, 2023
4a32b61
The datatable is loading the data.
Aug 19, 2023
783a2b3
Delete the author column
Aug 19, 2023
788dccb
Adding the data table with the change in the filter.
Aug 19, 2023
ec3a159
test de datatable
Aug 20, 2023
1f2ee77
add the serializer for author and categories
Aug 20, 2023
e53b16c
falta:
Aug 21, 2023
b78f04b
falta:
Aug 22, 2023
195575f
add the edit in the datatable, blog
Aug 22, 2023
8377f1f
add the update in the blog
Aug 22, 2023
f4b275d
change the fields, datatable
Aug 25, 2023
ad97945
Revert "change the fields, datatable"
Aug 26, 2023
5575f58
add the change in the viewset
Aug 29, 2023
08608d2
version con el actualizar en un modal
Aug 29, 2023
638fed4
Beta final.
Sep 3, 2023
14e1185
Blog funcional
Sep 3, 2023
0ed4427
bug de la ruta del action detail arreglado
Sep 10, 2023
6214b69
arrelgando bug: al seleccionar la fila se enrutaba en lugar de al sel…
Sep 10, 2023
2869d90
falta arreglar el problema con el actualizar
Sep 10, 2023
7a9f46e
beta de blog
Sep 11, 2023
bb58b70
codigo limpio
Sep 11, 2023
3bd31a5
arreglando problema con el title en el modal del eliminar
Sep 12, 2023
33cec10
creando mis pruebas unitarias
Sep 15, 2023
e50a935
validaciones de permisos compeltados
Sep 17, 2023
118c41f
permisos para ver detalles
Sep 18, 2023
54eb45c
Blog permission management
Sep 18, 2023
4fefffe
Add the test in the blog
Sep 19, 2023
5f95686
feature_image in the API
Sep 23, 2023
9b1578f
Add new API
Sep 25, 2023
a2c7d40
Add new api
Sep 26, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions demo/demoapp/object_management/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ def person_object_management(response):
'update_form': PersonForm(prefix='update'),
}
return render(response, 'object_management.html', context=context)

2 changes: 1 addition & 1 deletion demo/demoapp/templates/object_management.html
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ <h3 class="heading-1"><span> {% trans 'List of Objects' %} </span></h3>
datatable_inits = {
columns: [
{data: "id", name: "id", title: gettext("Id"), type: "string", visible: false},
{data: "name", name: "name", title: gettext("Name"), type: "string", visible: true},
{data: "name", name: "<name></name>", title: gettext("Name"), type: "string", visible: true},
{data: "last_time", name: "last_time", title: gettext("Last Time"), type: "date", render: DataTable.render.datetime(),
"dateformat": document.datetime_format, visible: true},
{data: "born_date", name: "born_date", title: gettext("Born date"), type: "date", render: DataTable.render.date(),
Expand Down
60 changes: 60 additions & 0 deletions djgentelella/blog/blog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import viewsets
from rest_framework.authentication import TokenAuthentication, SessionAuthentication
from rest_framework.decorators import action
from rest_framework.filters import SearchFilter, OrderingFilter
from rest_framework.pagination import LimitOffsetPagination
from rest_framework.response import Response

from djgentelella.permission_management import AllPermissionByAction, \
AnyPermissionByAction
from djgentelella.objectmanagement import AuthAllPermBaseObjectManagement


class BaseObjectBlog(AuthAllPermBaseObjectManagement):
serializer_class = {
'list': None,
'create': None,
'update': None,
'retrieve': None,
'get_values_for_update': None,
'destroy': None

}
# authentication_classes = (TokenAuthentication, SessionAuthentication)
# queryset =
pagination_class = LimitOffsetPagination
filter_backends = (DjangoFilterBackend, SearchFilter, OrderingFilter)
operation_type = ''

def get_serializer_class(self):
if isinstance(self.serializer_class, dict):
if self.action in self.serializer_class:
return self.serializer_class[self.action]
return super().get_serializer_class()

def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
data = self.paginate_queryset(queryset)
response = {'data': data, 'recordsTotal': self.queryset.count(),
'recordsFiltered': queryset.count(),
'draw': self.request.GET.get('draw', 1)}
return Response(self.get_serializer(response).data)

def retrieve(self, request, *args, **kwargs):
return super().retrieve(request, *args, **kwargs)

@action(detail=True, methods=['get'])
def get_values_for_update(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
return Response(serializer.data)

@action(detail=False, methods=['get'])
def detail_template(self, request, *args, **kwargs):
data = {
"title": "Title {{it.title}}",
"template": "Name: {{it.title}}"
}
return Response(data)

41 changes: 41 additions & 0 deletions djgentelella/blog/fields.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import base64
from django.core.files.base import ContentFile
from django.utils.translation import gettext_lazy as _
from rest_framework import serializers

class GTBase64FileField(serializers.Field):
def to_internal_value(self, data):

if not isinstance(data, list):
raise serializers.ValidationError(_("List was expected"))


if len(data) < 1:
raise serializers.ValidationError(
_("List must contain at least one element"))


file_info = data[0]


if not isinstance(file_info, dict) or 'name' not in file_info or 'value' not in file_info:
raise serializers.ValidationError(
_("Invalid structure. You need to provide {name: 'name of file', value: 'base64 string representation'}"))


file_name = file_info['name']
file_value = file_info['value']

try:

decoded_value = base64.b64decode(file_value)
except base64.binascii.Error:
raise serializers.ValidationError(_(
"The 'value' is not a valid base64 string"))

file_content = ContentFile(decoded_value, name=file_name)

return file_content

def to_representation(self, value):
pass
18 changes: 9 additions & 9 deletions djgentelella/blog/forms.py
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
from django import forms
from markitup.widgets import MarkItUpWidget

from rest_framework.reverse import reverse_lazy

from djgentelella.forms.forms import CustomForm
from djgentelella.forms.forms import CustomForm, GTForm
from djgentelella.widgets import core as genwidgets
from . import models
from djgentelella.widgets.wysiwyg import TextareaWysiwyg

from . import models
class EntryForm(GTForm, forms.ModelForm):

class EntryForm(CustomForm, forms.ModelForm):
class Meta:
model = models.Entry
exclude = ('published_content', 'author')
widgets = {
'title': genwidgets.TextInput,
'content': MarkItUpWidget,
'resume': MarkItUpWidget,
'content': genwidgets.Textarea,
'resume': genwidgets.Textarea,
'is_published': genwidgets.YesNoInput,
'categories': genwidgets.SelectMultipleAdd(attrs={
'add_url': reverse_lazy('blog:category_add')
})
}

}),

}
class CategoryForm(CustomForm, forms.ModelForm):
class Meta:
model = models.Category
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,4 @@ <h2>{{ entry.title }}
</div>
</div>

{% endblock %}
{% endblock %}
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@
</div>

{{ form.media }}
{% endblock %}
{% endblock %}
Loading