Skip to content

Commit fe76ca6

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

File tree

13 files changed

+187
-2
lines changed

13 files changed

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

demo_multiple_fields_1_model/migrations/__init__.py

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

demo_multiple_fields_1_model/receivers.py

Whitespace-only changes.

0 commit comments

Comments
 (0)