Skip to content

Commit eabef47

Browse files
vipulnarang95pre-commit-ci[bot]marksweb
authored
Added site field in models n site filter in admin (#159)
* Added site field in models n site filter in admin * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * updated versioning branch * Add test cases and updated the implementation * Update CHANGELOG.rst Co-authored-by: Mark Walker <theshow@gmail.com> * corrected formatting * fixed flake8 issues * removed list_filter --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Mark Walker <theshow@gmail.com>
1 parent aaec619 commit eabef47

File tree

7 files changed

+76
-2
lines changed

7 files changed

+76
-2
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Changelog
44

55
Unreleased
66
==========
7+
* feat: Added sites support for Snippets
78
* add support for python 3.10
89
* add support for django 4.2
910
* drop support for django < 3.2

djangocms_snippet/admin.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from django.urls import path
1010
from django.utils.translation import gettext as _
1111

12+
from cms.utils import get_current_site
1213
from cms.utils.permissions import get_model_permission_codename
1314

1415
from .cms_config import SnippetCMSAppConfig
@@ -50,6 +51,13 @@ class SnippetAdmin(*snippet_admin_classes):
5051
class Meta:
5152
model = Snippet
5253

54+
def get_queryset(self, request):
55+
site = get_current_site()
56+
queryset = super().get_queryset(request)
57+
# Filter queryset with current site and no site
58+
queryset = queryset.filter(models.Q(site=site) | models.Q(site=None))
59+
return queryset
60+
5361
def get_list_display(self, request):
5462
list_display = super().get_list_display(request)
5563
list_display = list(list_display)

djangocms_snippet/forms.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class Meta:
2727
"slug",
2828
"snippet_grouper",
2929
"template",
30+
"site",
3031
)
3132

3233
def __init__(self, *args, **kwargs):
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by Django 4.2.11 on 2024-05-07 03:43
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('sites', '0002_alter_domain_unique'),
11+
('djangocms_snippet', '0012_auto_20210915_0721'),
12+
]
13+
14+
operations = [
15+
migrations.AddField(
16+
model_name='snippet',
17+
name='site',
18+
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sites.site'),
19+
),
20+
]

djangocms_snippet/models.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from django.conf import settings
2+
from django.contrib.sites.models import Site
23
from django.db import models
34
from django.shortcuts import reverse
45
from django.utils.translation import gettext_lazy as _
@@ -70,6 +71,7 @@ class Snippet(models.Model):
7071
default='',
7172
max_length=255,
7273
)
74+
site = models.ForeignKey(Site, on_delete=models.CASCADE, null=True, blank=True)
7375

7476
def __str__(self):
7577
return self.name

tests/requirements/dj42_cms40.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ Django>=4.2,<5.0
44

55
# Unreleased django 4.2 & django-cms 4.0.x compatible packages
66
https://github.com/django-cms/django-cms/tarball/release/4.0.1.x#egg=django-cms
7-
https://github.com/joshyu/djangocms-versioning/tarball/feat/django-42-compatible#egg=djangocms-versioning
7+
https://github.com/django-cms/djangocms-versioning/tarball/support/django-cms-4.0.x#egg=djangocms-versioning

tests/test_admin.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
from importlib import reload
22

33
from django.contrib import admin
4+
from django.contrib.sites.models import Site
45
from django.shortcuts import reverse
56
from django.test import RequestFactory, override_settings
67

78
from cms.test_utils.testcases import CMSTestCase
9+
from cms.utils import get_current_site
810

911
from djangocms_versioning.models import Version
1012

@@ -23,12 +25,52 @@ def setUp(self):
2325
html="<h1>This is a test</h1>",
2426
snippet_grouper=SnippetGrouper.objects.create(),
2527
)
26-
self.snippet_version = Version.objects.create(content=self.snippet, created_by=self.superuser)
28+
self.snippet_version = Version.objects.create(
29+
content=self.snippet,
30+
created_by=self.superuser,
31+
state='published'
32+
)
2733
self.snippet_admin = snippet_admin.SnippetAdmin(Snippet, admin)
2834
self.snippet_admin_request = RequestFactory().get("/admin/djangocms_snippet")
2935
self.edit_url = reverse("admin:djangocms_snippet_snippet_change", args=(self.snippet.id,),)
3036
self.delete_url = reverse("admin:djangocms_snippet_snippet_delete", args=(self.snippet.id,),)
3137

38+
def test_get_queryset(self):
39+
current_site = get_current_site()
40+
another_site = Site.objects.create(domain='http://www.django-cms.org', name='Django CMS', pk=3)
41+
current_site_snippet = Snippet.objects.create(
42+
name="Test Snippet 1",
43+
slug="test-snippet-one",
44+
html="<h1>This is a test snippet one</h1>",
45+
snippet_grouper=SnippetGrouper.objects.create(),
46+
site=current_site
47+
)
48+
another_site_snippet = Snippet.objects.create(
49+
name="Test Snippet 2",
50+
slug="test-snippet-two",
51+
html="<h1>This is a test snippet two</h1>",
52+
snippet_grouper=SnippetGrouper.objects.create(),
53+
site=another_site
54+
)
55+
# Create versions of snippets
56+
Version.objects.create(
57+
content=current_site_snippet,
58+
created_by=self.superuser,
59+
state='published'
60+
)
61+
Version.objects.create(
62+
content=another_site_snippet,
63+
created_by=self.superuser,
64+
state='published'
65+
)
66+
queryset = self.snippet_admin.get_queryset(self.snippet_admin_request)
67+
# Test for snippet of current site
68+
self.assertIn(current_site_snippet, queryset)
69+
# Test for snippet with no site
70+
self.assertIn(self.snippet, queryset)
71+
# Test for snippet with another site
72+
self.assertNotIn(another_site_snippet, queryset)
73+
3274
@override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=False)
3375
def test_admin_list_display_without_versioning(self):
3476
"""

0 commit comments

Comments
 (0)