Skip to content

Commit

Permalink
Added two_fields_in_one_model demo.
Browse files Browse the repository at this point in the history
  • Loading branch information
dzhuang committed Apr 22, 2024
1 parent 6d9d896 commit fe76ca6
Show file tree
Hide file tree
Showing 13 changed files with 187 additions and 2 deletions.
3 changes: 2 additions & 1 deletion demo/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
'galleryfield',
'sorl.thumbnail',
'demo',
'demo_custom'
'demo_custom',
'demo_multiple_fields_1_model'
]

MIDDLEWARE = [
Expand Down
5 changes: 4 additions & 1 deletion demo/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@
path('admin/', admin.site.urls),
]

urlpatterns += [path(r"custom/", include("demo_custom.urls"))]
urlpatterns += [
path(r"custom/", include("demo_custom.urls")),
path(r"multifields/", include("demo_multiple_fields_1_model.urls")),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Empty file.
1 change: 1 addition & 0 deletions demo_multiple_fields_1_model/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

9 changes: 9 additions & 0 deletions demo_multiple_fields_1_model/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.apps import AppConfig


class DemoCustomConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'demo_multiple_fields_1_model'

def ready(self):
import demo_multiple_fields_1_model.receivers # noqa
Empty file.
78 changes: 78 additions & 0 deletions demo_multiple_fields_1_model/image_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
from django.core.exceptions import PermissionDenied

from galleryfield.image_views import (ImageCreateView, ImageCropView,
ImageListView)


class MyImage1CreateView(ImageCreateView):
target_model = "demo_multiple_fields_1_model.MyImage1"
disable_server_side_crop = False

def create_instance_from_form(self, form):
self.object = form.save(commit=False)
self.object.creator = self.request.user
self.object.save()


class MyImage1ListView(ImageListView):
target_model = "event.MyImage1"
disable_server_side_crop = False

def get_queryset(self):
queryset = super().get_queryset()
if not self.request.user.is_superuser:
queryset = queryset.filter(creator=self.request.user)
return queryset


class MyImage1CropView(ImageCropView):
target_model = "demo_multiple_fields_1_model.MyImage1"
disable_server_side_crop = False

def get_object(self, queryset=None):
obj = super().get_object(queryset=None)
if not self.request.user.is_superuser and obj.creator != self.request.user:
raise PermissionDenied("May not crop other user's image")
return obj

def create_cropped_instance_from_form(self, form):
# we don't need to set self.object.creator here because
# it's copied from the original instance.
self.object = form.save()


class MyImage2CreateView(ImageCreateView):
target_model = "demo_multiple_fields_1_model.MyImage2"
disable_server_side_crop = False

def create_instance_from_form(self, form):
self.object = form.save(commit=False)
self.object.creator = self.request.user
self.object.save()


class MyImage2ListView(ImageListView):
target_model = "demo_multiple_fields_1_model.MyImage2"
disable_server_side_crop = False

def get_queryset(self):
queryset = super().get_queryset()
if not self.request.user.is_superuser:
queryset = queryset.filter(creator=self.request.user)
return queryset


class MyImage2CropView(ImageCropView):
target_model = "demo_multiple_fields_1_model.MyImage2"
disable_server_side_crop = False

def get_object(self, queryset=None):
obj = super().get_object(queryset=None)
if not self.request.user.is_superuser and obj.creator != self.request.user:
raise PermissionDenied("May not crop other user's image")
return obj

def create_cropped_instance_from_form(self, form):
# we don't need to set self.object.creator here because
# it's copied from the original instance.
self.object = form.save()
Empty file.
58 changes: 58 additions & 0 deletions demo_multiple_fields_1_model/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from django.conf import settings
from django.core.files.storage import default_storage
from django.db import models
from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from PIL import Image

from galleryfield.fields import GalleryField


def fileName(image):
file_url = list(image.url.split("/"))
file_url.reverse()
file_name = file_url[0].split(".")[0]
return file_name


class MyImage1(models.Model):
photo1 = models.ImageField(
upload_to="my_images1", storage=default_storage, verbose_name=_("Image1")
)
creator = models.ForeignKey(
settings.AUTH_USER_MODEL,
null=False,
blank=False,
verbose_name=_("Creator"),
on_delete=models.CASCADE,
)

@classmethod
def get_image_field(cls):
return cls._meta.get_field("photo1")


class MyImage2(models.Model):
photo2 = models.ImageField(
upload_to="my_images2", storage=default_storage, verbose_name=_("Image2")
)

@classmethod
def get_image_field(cls):
return cls._meta.get_field("photo2")


class MyGallery(models.Model):
album1 = GalleryField(
target_model="demo_multiple_fields_1_model.MyImage1",
verbose_name=_("My photos"))
album2 = GalleryField(
target_model="demo_multiple_fields_1_model.MyImage2",
verbose_name=_("My photos2"))
owner = models.ForeignKey(
settings.AUTH_USER_MODEL,
null=False,
blank=False,
verbose_name=_("Owner"),
on_delete=models.CASCADE,
)
Empty file.
Empty file.
35 changes: 35 additions & 0 deletions demo_multiple_fields_1_model/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
from demo_multiple_fields_1_model import image_views
from django.urls import path

urlpatterns = [
path(
"upload1/",
image_views.MyImage1CreateView.as_view(),
name="event-myimage1-upload",
),
path(
"fetch1/",
(image_views.MyImage1ListView.as_view()),
name="event-myimage1-fetch",
),
path(
"crop1/<int:pk>",
image_views.MyImage1CropView.as_view(),
name="event-myimage1-crop",
),
path(
"upload2/",
image_views.MyImage2CreateView.as_view(),
name="event-myimage2-upload",
),
path(
"fetch2/",
(image_views.MyImage2ListView.as_view()),
name="event-myimage2-fetch",
),
path(
"crop2/<int:pk>",
image_views.MyImage2CropView.as_view(),
name="event-myimage2-crop",
),
]
Empty file.

0 comments on commit fe76ca6

Please sign in to comment.