Skip to content

Commit 7b55773

Browse files
committed
Added two_fields_in_one_model demo.
1 parent 6d9d896 commit 7b55773

File tree

13 files changed

+184
-2
lines changed

13 files changed

+184
-2
lines changed

demo/settings.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@
3939
'galleryfield',
4040
'sorl.thumbnail',
4141
'demo',
42-
'demo_custom'
42+
'demo_custom',
43+
'demo_multiple_fields_1_model'
4344
]
4445

4546
MIDDLEWARE = [

demo/urls.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@
1616
path('admin/', admin.site.urls),
1717
]
1818

19-
urlpatterns += [path(r"custom/", include("demo_custom.urls"))]
19+
urlpatterns += [
20+
path(r"custom/", include("demo_custom.urls")),
21+
path(r"multifields/", include("demo_multiple_fields_1_model.urls")),
22+
]
2023

2124
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

demo_multiple_fields_1_model/__init__.py

Whitespace-only changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from django.apps import AppConfig
2+
3+
4+
class DemoCustomConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'demo_multiple_fields_1_model'
7+
8+
def ready(self):
9+
import demo_multiple_fields_1_model.receivers # noqa

demo_multiple_fields_1_model/forms.py

Whitespace-only changes.
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
from django.core.exceptions import PermissionDenied
2+
from galleryfield.image_views import ImageCreateView, ImageListView, ImageCropView
3+
4+
5+
class MyImage1CreateView(ImageCreateView):
6+
target_model = "demo_multiple_fields_1_model.MyImage1"
7+
disable_server_side_crop = False
8+
9+
def create_instance_from_form(self, form):
10+
self.object = form.save(commit=False)
11+
self.object.creator = self.request.user
12+
self.object.save()
13+
14+
15+
class MyImage1ListView(ImageListView):
16+
target_model = "event.MyImage1"
17+
disable_server_side_crop = False
18+
19+
def get_queryset(self):
20+
queryset = super().get_queryset()
21+
if not self.request.user.is_superuser:
22+
queryset = queryset.filter(creator=self.request.user)
23+
return queryset
24+
25+
26+
class MyImage1CropView(ImageCropView):
27+
target_model = "demo_multiple_fields_1_model.MyImage1"
28+
disable_server_side_crop = False
29+
30+
def get_object(self, queryset=None):
31+
obj = super().get_object(queryset=None)
32+
if not self.request.user.is_superuser and obj.creator != self.request.user:
33+
raise PermissionDenied("May not crop other user's image")
34+
return obj
35+
36+
def create_cropped_instance_from_form(self, form):
37+
# we don't need to set self.object.creator here because
38+
# it's copied from the original instance.
39+
self.object = form.save()
40+
41+
42+
class MyImage2CreateView(ImageCreateView):
43+
target_model = "demo_multiple_fields_1_model.MyImage2"
44+
disable_server_side_crop = False
45+
46+
def create_instance_from_form(self, form):
47+
self.object = form.save(commit=False)
48+
self.object.creator = self.request.user
49+
self.object.save()
50+
51+
52+
class MyImage2ListView(ImageListView):
53+
target_model = "demo_multiple_fields_1_model.MyImage2"
54+
disable_server_side_crop = False
55+
56+
def get_queryset(self):
57+
queryset = super().get_queryset()
58+
if not self.request.user.is_superuser:
59+
queryset = queryset.filter(creator=self.request.user)
60+
return queryset
61+
62+
63+
class MyImage2CropView(ImageCropView):
64+
target_model = "demo_multiple_fields_1_model.MyImage2"
65+
disable_server_side_crop = False
66+
67+
def get_object(self, queryset=None):
68+
obj = super().get_object(queryset=None)
69+
if not self.request.user.is_superuser and obj.creator != self.request.user:
70+
raise PermissionDenied("May not crop other user's image")
71+
return obj
72+
73+
def create_cropped_instance_from_form(self, form):
74+
# we don't need to set self.object.creator here because
75+
# it's copied from the original instance.
76+
self.object = form.save()

demo_multiple_fields_1_model/migrations/__init__.py

Whitespace-only changes.
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
from django.db import models
2+
from django.utils.translation import gettext_lazy as _
3+
from django.conf import settings
4+
from django.utils.timezone import now
5+
from galleryfield.fields import GalleryField
6+
from django.core.files.storage import default_storage
7+
from PIL import Image
8+
9+
10+
def fileName(image):
11+
file_url = list(image.url.split("/"))
12+
file_url.reverse()
13+
file_name = file_url[0].split(".")[0]
14+
return file_name
15+
16+
17+
class MyImage1(models.Model):
18+
photo1 = models.ImageField(
19+
upload_to="my_images1", storage=default_storage, verbose_name=_("Image1")
20+
)
21+
creator = models.ForeignKey(
22+
settings.AUTH_USER_MODEL,
23+
null=False,
24+
blank=False,
25+
verbose_name=_("Creator"),
26+
on_delete=models.CASCADE,
27+
)
28+
29+
@classmethod
30+
def get_image_field(cls):
31+
return cls._meta.get_field("photo1")
32+
33+
34+
class MyImage2(models.Model):
35+
photo2 = models.ImageField(
36+
upload_to="my_images2", storage=default_storage, verbose_name=_("Image2")
37+
)
38+
39+
@classmethod
40+
def get_image_field(cls):
41+
return cls._meta.get_field("photo2")
42+
43+
44+
class MyGallery(models.Model):
45+
album1 = GalleryField(
46+
target_model="demo_multiple_fields_1_model.MyImage1",
47+
verbose_name=_("My photos"))
48+
album2 = GalleryField(
49+
target_model="demo_multiple_fields_1_model.MyImage2",
50+
verbose_name=_("My photos2"))
51+
owner = models.ForeignKey(
52+
settings.AUTH_USER_MODEL,
53+
null=False,
54+
blank=False,
55+
verbose_name=_("Owner"),
56+
on_delete=models.CASCADE,
57+
)

demo_multiple_fields_1_model/receivers.py

Whitespace-only changes.

0 commit comments

Comments
 (0)