django-camomilla-cms 5.8.5__py2.py3-none-any.whl → 6.0.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. camomilla/__init__.py +8 -2
  2. camomilla/apps.py +9 -1
  3. camomilla/context_processors.py +6 -0
  4. camomilla/contrib/modeltranslation/__init__.py +0 -0
  5. camomilla/contrib/modeltranslation/hvad_migration.py +126 -0
  6. camomilla/dynamic_pages_urls.py +33 -0
  7. camomilla/fields/__init__.py +13 -0
  8. camomilla/{fields.py → fields/json.py} +15 -18
  9. camomilla/management/commands/regenerate_thumbnails.py +0 -1
  10. camomilla/managers/__init__.py +3 -0
  11. camomilla/managers/pages.py +116 -0
  12. camomilla/model_api.py +86 -0
  13. camomilla/models/__init__.py +5 -6
  14. camomilla/models/article.py +26 -44
  15. camomilla/models/content.py +8 -15
  16. camomilla/models/media.py +70 -97
  17. camomilla/models/menu.py +106 -0
  18. camomilla/models/mixins/__init__.py +10 -48
  19. camomilla/models/page.py +521 -20
  20. camomilla/openapi/__init__.py +0 -0
  21. camomilla/openapi/schema.py +67 -0
  22. camomilla/parsers.py +0 -1
  23. camomilla/redirects.py +10 -0
  24. camomilla/serializers/__init__.py +2 -0
  25. camomilla/serializers/article.py +5 -10
  26. camomilla/serializers/base/__init__.py +21 -17
  27. camomilla/serializers/content_type.py +17 -0
  28. camomilla/serializers/fields/__init__.py +6 -20
  29. camomilla/serializers/fields/file.py +5 -0
  30. camomilla/serializers/fields/related.py +24 -4
  31. camomilla/serializers/media.py +6 -8
  32. camomilla/serializers/menu.py +17 -0
  33. camomilla/serializers/mixins/__init__.py +23 -187
  34. camomilla/serializers/mixins/fields.py +20 -0
  35. camomilla/serializers/mixins/filter_fields.py +57 -0
  36. camomilla/serializers/mixins/json.py +34 -0
  37. camomilla/serializers/mixins/language.py +32 -0
  38. camomilla/serializers/mixins/nesting.py +35 -0
  39. camomilla/serializers/mixins/optimize.py +91 -0
  40. camomilla/serializers/mixins/ordering.py +34 -0
  41. camomilla/serializers/mixins/page.py +58 -0
  42. camomilla/serializers/mixins/translation.py +103 -0
  43. camomilla/serializers/page.py +53 -4
  44. camomilla/serializers/user.py +5 -4
  45. camomilla/serializers/utils.py +38 -0
  46. camomilla/serializers/validators.py +51 -0
  47. camomilla/settings.py +118 -0
  48. camomilla/sitemap.py +30 -0
  49. camomilla/storages/__init__.py +4 -0
  50. camomilla/storages/default.py +12 -0
  51. camomilla/storages/optimize.py +71 -0
  52. camomilla/{storages.py → storages/overwrite.py} +2 -2
  53. camomilla/templates/admin/camomilla/page/change_form.html +10 -0
  54. camomilla/templates/defaults/articles/default.html +7 -0
  55. camomilla/templates/defaults/base.html +170 -0
  56. camomilla/templates/defaults/pages/default.html +3 -0
  57. camomilla/templates/defaults/parts/langswitch.html +83 -0
  58. camomilla/templates/defaults/parts/menu.html +15 -0
  59. camomilla/templates_context/__init__.py +0 -0
  60. camomilla/templates_context/autodiscover.py +51 -0
  61. camomilla/templates_context/rendering.py +89 -0
  62. camomilla/templatetags/camomilla_filters.py +6 -5
  63. camomilla/templatetags/menus.py +37 -0
  64. camomilla/templatetags/model_extras.py +77 -0
  65. camomilla/theme/__init__.py +1 -1
  66. camomilla/theme/admin/__init__.py +99 -0
  67. camomilla/theme/admin/pages.py +46 -0
  68. camomilla/theme/admin/translations.py +13 -0
  69. camomilla/theme/apps.py +38 -0
  70. camomilla/theme/static/admin/css/responsive.css +5 -1021
  71. camomilla/theme/static/admin/img/favicon.ico +0 -0
  72. camomilla/theme/static/admin/img/logo.svg +31 -0
  73. camomilla/theme/templates/admin/base.html +7 -0
  74. camomilla/theme/templates/rosetta/base.html +196 -0
  75. camomilla/translation.py +61 -0
  76. camomilla/urls.py +38 -17
  77. camomilla/utils/__init__.py +4 -0
  78. camomilla/utils/getters.py +27 -0
  79. camomilla/utils/normalization.py +7 -0
  80. camomilla/utils/query_parser.py +167 -0
  81. camomilla/{utils.py → utils/seo.py} +13 -15
  82. camomilla/utils/setters.py +37 -0
  83. camomilla/utils/templates.py +32 -0
  84. camomilla/utils/translation.py +114 -0
  85. camomilla/views/__init__.py +1 -1
  86. camomilla/views/articles.py +5 -7
  87. camomilla/views/base/__init__.py +35 -5
  88. camomilla/views/contents.py +6 -11
  89. camomilla/views/decorators.py +26 -0
  90. camomilla/views/medias.py +24 -19
  91. camomilla/views/menus.py +81 -0
  92. camomilla/views/mixins/__init__.py +17 -73
  93. camomilla/views/mixins/bulk_actions.py +22 -0
  94. camomilla/views/mixins/language.py +33 -0
  95. camomilla/views/mixins/optimize.py +18 -0
  96. camomilla/views/mixins/ordering.py +2 -2
  97. camomilla/views/mixins/pagination.py +12 -18
  98. camomilla/views/mixins/permissions.py +6 -0
  99. camomilla/views/pages.py +28 -6
  100. camomilla/views/tags.py +5 -6
  101. camomilla/views/users.py +7 -12
  102. django_camomilla_cms-6.0.0.dist-info/METADATA +123 -0
  103. django_camomilla_cms-6.0.0.dist-info/RECORD +133 -0
  104. {django_camomilla_cms-5.8.5.dist-info → django_camomilla_cms-6.0.0.dist-info}/WHEEL +1 -1
  105. tests/fixtures/__init__.py +14 -0
  106. tests/test_api.py +22 -39
  107. tests/test_camomilla_filters.py +11 -13
  108. tests/test_media.py +152 -0
  109. tests/test_menu.py +112 -0
  110. tests/test_model_api.py +113 -0
  111. tests/test_model_api_permissions.py +44 -0
  112. tests/test_model_api_register.py +355 -0
  113. tests/test_pages.py +351 -0
  114. tests/test_query_parser.py +58 -0
  115. tests/test_templates_context.py +149 -0
  116. tests/test_utils.py +64 -64
  117. tests/utils/__init__.py +0 -0
  118. tests/utils/api.py +28 -0
  119. tests/utils/media.py +10 -0
  120. camomilla/admin.py +0 -98
  121. camomilla/migrations/0001_initial.py +0 -577
  122. camomilla/migrations/0002_auto_20200214_1127.py +0 -33
  123. camomilla/migrations/0003_auto_20210130_1610.py +0 -30
  124. camomilla/migrations/0004_auto_20210511_0937.py +0 -25
  125. camomilla/migrations/0005_media_image_props.py +0 -19
  126. camomilla/migrations/0006_auto_20220103_1845.py +0 -35
  127. camomilla/migrations/0007_auto_20220211_1622.py +0 -18
  128. camomilla/migrations/0008_auto_20220309_1616.py +0 -60
  129. camomilla/migrations/0009_article__hvad_query_category__hvad_query_and_more.py +0 -165
  130. camomilla/migrations/0010_auto_20220802_1406.py +0 -83
  131. camomilla/migrations/0011_auto_20220902_1000.py +0 -15
  132. camomilla/models/category.py +0 -25
  133. camomilla/models/tag.py +0 -19
  134. camomilla/theme/static/admin/img/logo.png +0 -0
  135. camomilla/theme/templates/admin/base_site.html +0 -18
  136. camomilla/views/categories.py +0 -13
  137. django_camomilla_cms-5.8.5.dist-info/METADATA +0 -62
  138. django_camomilla_cms-5.8.5.dist-info/RECORD +0 -76
  139. tests/urls.py +0 -21
  140. /camomilla/{migrations → contrib}/__init__.py +0 -0
  141. /camomilla/templates/{camomilla → defaults}/widgets/media_select_multiple.html +0 -0
  142. {django_camomilla_cms-5.8.5.dist-info → django_camomilla_cms-6.0.0.dist-info/licenses}/LICENSE +0 -0
  143. {django_camomilla_cms-5.8.5.dist-info → django_camomilla_cms-6.0.0.dist-info}/top_level.txt +0 -0
@@ -1,577 +0,0 @@
1
- # Generated by Django 2.2.6 on 2019-10-10 17:00
2
-
3
- from django.conf import settings
4
- from django.db import migrations, models
5
- import django.db.models.deletion
6
- import django.db.models.manager
7
-
8
-
9
- class Migration(migrations.Migration):
10
-
11
- initial = True
12
-
13
- dependencies = [
14
- migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15
- ]
16
-
17
- operations = [
18
- migrations.CreateModel(
19
- name="Category",
20
- fields=[
21
- (
22
- "id",
23
- models.AutoField(
24
- auto_created=True,
25
- primary_key=True,
26
- serialize=False,
27
- verbose_name="ID",
28
- ),
29
- ),
30
- ],
31
- options={
32
- "verbose_name_plural": "categories",
33
- "abstract": False,
34
- },
35
- managers=[
36
- ("objects", django.db.models.manager.Manager()),
37
- ("_plain_manager", django.db.models.manager.Manager()),
38
- ],
39
- ),
40
- migrations.CreateModel(
41
- name="Media",
42
- fields=[
43
- (
44
- "id",
45
- models.AutoField(
46
- auto_created=True,
47
- primary_key=True,
48
- serialize=False,
49
- verbose_name="ID",
50
- ),
51
- ),
52
- ("file", models.FileField(upload_to="")),
53
- (
54
- "thumbnail",
55
- models.ImageField(
56
- blank=True, max_length=500, null=True, upload_to="thumbnails"
57
- ),
58
- ),
59
- ("created", models.DateTimeField(auto_now=True)),
60
- ("name", models.CharField(blank=True, max_length=200, null=True)),
61
- ("size", models.IntegerField(blank=True, default=0, null=True)),
62
- ("is_image", models.BooleanField(default=False)),
63
- ],
64
- options={
65
- "ordering": ["-pk"],
66
- },
67
- managers=[
68
- ("objects", django.db.models.manager.Manager()),
69
- ("_plain_manager", django.db.models.manager.Manager()),
70
- ],
71
- ),
72
- migrations.CreateModel(
73
- name="MediaFolder",
74
- fields=[
75
- (
76
- "id",
77
- models.AutoField(
78
- auto_created=True,
79
- primary_key=True,
80
- serialize=False,
81
- verbose_name="ID",
82
- ),
83
- ),
84
- ("slug", models.SlugField()),
85
- ("creation_date", models.DateTimeField(auto_now_add=True)),
86
- ("last_modified", models.DateTimeField(auto_now=True)),
87
- (
88
- "icon",
89
- models.ForeignKey(
90
- blank=True,
91
- null=True,
92
- on_delete=django.db.models.deletion.SET_NULL,
93
- to="camomilla.Media",
94
- verbose_name="Image cover",
95
- ),
96
- ),
97
- (
98
- "updir",
99
- models.ForeignKey(
100
- blank=True,
101
- null=True,
102
- on_delete=django.db.models.deletion.CASCADE,
103
- to="camomilla.MediaFolder",
104
- ),
105
- ),
106
- ],
107
- options={
108
- "abstract": False,
109
- },
110
- managers=[
111
- ("objects", django.db.models.manager.Manager()),
112
- ("_plain_manager", django.db.models.manager.Manager()),
113
- ],
114
- ),
115
- migrations.CreateModel(
116
- name="Page",
117
- fields=[
118
- (
119
- "id",
120
- models.AutoField(
121
- auto_created=True,
122
- primary_key=True,
123
- serialize=False,
124
- verbose_name="ID",
125
- ),
126
- ),
127
- ("identifier", models.CharField(max_length=200, unique=True)),
128
- (
129
- "og_image",
130
- models.ForeignKey(
131
- blank=True,
132
- null=True,
133
- on_delete=django.db.models.deletion.SET_NULL,
134
- related_name="camomilla_page_related",
135
- to="camomilla.Media",
136
- ),
137
- ),
138
- ],
139
- options={
140
- "verbose_name": "Page",
141
- "verbose_name_plural": "Pages",
142
- "abstract": False,
143
- },
144
- managers=[
145
- ("objects", django.db.models.manager.Manager()),
146
- ("_plain_manager", django.db.models.manager.Manager()),
147
- ],
148
- ),
149
- migrations.CreateModel(
150
- name="Tag",
151
- fields=[
152
- (
153
- "id",
154
- models.AutoField(
155
- auto_created=True,
156
- primary_key=True,
157
- serialize=False,
158
- verbose_name="ID",
159
- ),
160
- ),
161
- ],
162
- options={
163
- "abstract": False,
164
- },
165
- managers=[
166
- ("objects", django.db.models.manager.Manager()),
167
- ("_plain_manager", django.db.models.manager.Manager()),
168
- ],
169
- ),
170
- migrations.AddField(
171
- model_name="media",
172
- name="folder",
173
- field=models.ForeignKey(
174
- blank=True,
175
- null=True,
176
- on_delete=django.db.models.deletion.CASCADE,
177
- related_name="media_folder",
178
- to="camomilla.MediaFolder",
179
- ),
180
- ),
181
- migrations.CreateModel(
182
- name="Content",
183
- fields=[
184
- (
185
- "id",
186
- models.AutoField(
187
- auto_created=True,
188
- primary_key=True,
189
- serialize=False,
190
- verbose_name="ID",
191
- ),
192
- ),
193
- ("identifier", models.CharField(max_length=200)),
194
- (
195
- "page",
196
- models.ForeignKey(
197
- null=True,
198
- on_delete=django.db.models.deletion.SET_NULL,
199
- related_name="contents",
200
- to="camomilla.Page",
201
- ),
202
- ),
203
- ],
204
- options={
205
- "abstract": False,
206
- "unique_together": {("page", "identifier")},
207
- },
208
- managers=[
209
- ("objects", django.db.models.manager.Manager()),
210
- ("_plain_manager", django.db.models.manager.Manager()),
211
- ],
212
- ),
213
- migrations.CreateModel(
214
- name="Article",
215
- fields=[
216
- (
217
- "id",
218
- models.AutoField(
219
- auto_created=True,
220
- primary_key=True,
221
- serialize=False,
222
- verbose_name="ID",
223
- ),
224
- ),
225
- ("trash", models.BooleanField(default=False)),
226
- ("identifier", models.CharField(max_length=200, unique=True)),
227
- (
228
- "status",
229
- models.CharField(
230
- choices=[
231
- ("PUB", "Published"),
232
- ("DRF", "Draft"),
233
- ("TRS", "Trash"),
234
- ("PLA", "Planned"),
235
- ],
236
- default="DRF",
237
- max_length=3,
238
- ),
239
- ),
240
- ("date", models.DateTimeField(auto_now=True)),
241
- ("pubblication_date", models.DateTimeField(blank=True, null=True)),
242
- (
243
- "author",
244
- models.ForeignKey(
245
- blank=True,
246
- null=True,
247
- on_delete=django.db.models.deletion.SET_NULL,
248
- to=settings.AUTH_USER_MODEL,
249
- ),
250
- ),
251
- (
252
- "categories",
253
- models.ManyToManyField(blank=True, to="camomilla.Category"),
254
- ),
255
- (
256
- "highlight_image",
257
- models.ForeignKey(
258
- blank=True,
259
- null=True,
260
- on_delete=django.db.models.deletion.SET_NULL,
261
- to="camomilla.Media",
262
- ),
263
- ),
264
- (
265
- "og_image",
266
- models.ForeignKey(
267
- blank=True,
268
- null=True,
269
- on_delete=django.db.models.deletion.SET_NULL,
270
- related_name="camomilla_article_related",
271
- to="camomilla.Media",
272
- ),
273
- ),
274
- ("tags", models.ManyToManyField(blank=True, to="camomilla.Tag")),
275
- ],
276
- options={
277
- "abstract": False,
278
- },
279
- managers=[
280
- ("trashmanager", django.db.models.manager.Manager()),
281
- ("_plain_manager", django.db.models.manager.Manager()),
282
- ],
283
- ),
284
- migrations.CreateModel(
285
- name="TagTranslation",
286
- fields=[
287
- (
288
- "id",
289
- models.AutoField(
290
- auto_created=True,
291
- primary_key=True,
292
- serialize=False,
293
- verbose_name="ID",
294
- ),
295
- ),
296
- ("title", models.CharField(max_length=200)),
297
- ("language_code", models.CharField(db_index=True, max_length=15)),
298
- (
299
- "master",
300
- models.ForeignKey(
301
- editable=False,
302
- on_delete=django.db.models.deletion.CASCADE,
303
- related_name="translations",
304
- to="camomilla.Tag",
305
- ),
306
- ),
307
- ],
308
- options={
309
- "db_table": "camomilla_tag_translation",
310
- "db_tablespace": "",
311
- "abstract": False,
312
- "managed": True,
313
- "default_permissions": (),
314
- "unique_together": {
315
- ("language_code", "master"),
316
- ("title", "language_code"),
317
- },
318
- },
319
- ),
320
- migrations.CreateModel(
321
- name="PageTranslation",
322
- fields=[
323
- (
324
- "id",
325
- models.AutoField(
326
- auto_created=True,
327
- primary_key=True,
328
- serialize=False,
329
- verbose_name="ID",
330
- ),
331
- ),
332
- ("title", models.CharField(max_length=200)),
333
- ("description", models.TextField(blank=True, default="", null=True)),
334
- ("permalink", models.CharField(blank=True, max_length=200)),
335
- ("og_description", models.TextField(blank=True, default="", null=True)),
336
- (
337
- "og_title",
338
- models.CharField(blank=True, default="", max_length=200, null=True),
339
- ),
340
- (
341
- "og_type",
342
- models.CharField(blank=True, default="", max_length=200, null=True),
343
- ),
344
- (
345
- "og_url",
346
- models.CharField(blank=True, default="", max_length=200, null=True),
347
- ),
348
- (
349
- "canonical",
350
- models.CharField(blank=True, default="", max_length=200, null=True),
351
- ),
352
- ("language_code", models.CharField(db_index=True, max_length=15)),
353
- (
354
- "master",
355
- models.ForeignKey(
356
- editable=False,
357
- on_delete=django.db.models.deletion.CASCADE,
358
- related_name="translations",
359
- to="camomilla.Page",
360
- ),
361
- ),
362
- ],
363
- options={
364
- "db_table": "camomilla_page_translation",
365
- "db_tablespace": "",
366
- "abstract": False,
367
- "managed": True,
368
- "default_permissions": (),
369
- "unique_together": {("language_code", "master")},
370
- },
371
- ),
372
- migrations.CreateModel(
373
- name="MediaTranslation",
374
- fields=[
375
- (
376
- "id",
377
- models.AutoField(
378
- auto_created=True,
379
- primary_key=True,
380
- serialize=False,
381
- verbose_name="ID",
382
- ),
383
- ),
384
- ("alt_text", models.CharField(blank=True, max_length=200, null=True)),
385
- ("title", models.CharField(blank=True, max_length=200, null=True)),
386
- ("description", models.TextField(blank=True, null=True)),
387
- ("language_code", models.CharField(db_index=True, max_length=15)),
388
- (
389
- "master",
390
- models.ForeignKey(
391
- editable=False,
392
- on_delete=django.db.models.deletion.CASCADE,
393
- related_name="translations",
394
- to="camomilla.Media",
395
- ),
396
- ),
397
- ],
398
- options={
399
- "db_table": "camomilla_media_translation",
400
- "db_tablespace": "",
401
- "abstract": False,
402
- "managed": True,
403
- "default_permissions": (),
404
- "unique_together": {("language_code", "master")},
405
- },
406
- ),
407
- migrations.CreateModel(
408
- name="MediaFolderTranslation",
409
- fields=[
410
- (
411
- "id",
412
- models.AutoField(
413
- auto_created=True,
414
- primary_key=True,
415
- serialize=False,
416
- verbose_name="ID",
417
- ),
418
- ),
419
- (
420
- "description",
421
- models.CharField(blank=True, max_length=200, null=True),
422
- ),
423
- ("title", models.CharField(blank=True, max_length=200, null=True)),
424
- ("language_code", models.CharField(db_index=True, max_length=15)),
425
- (
426
- "master",
427
- models.ForeignKey(
428
- editable=False,
429
- on_delete=django.db.models.deletion.CASCADE,
430
- related_name="translations",
431
- to="camomilla.MediaFolder",
432
- ),
433
- ),
434
- ],
435
- options={
436
- "db_table": "camomilla_mediafolder_translation",
437
- "db_tablespace": "",
438
- "abstract": False,
439
- "managed": True,
440
- "default_permissions": (),
441
- "unique_together": {("language_code", "master")},
442
- },
443
- ),
444
- migrations.CreateModel(
445
- name="ContentTranslation",
446
- fields=[
447
- (
448
- "id",
449
- models.AutoField(
450
- auto_created=True,
451
- primary_key=True,
452
- serialize=False,
453
- verbose_name="ID",
454
- ),
455
- ),
456
- ("title", models.CharField(max_length=200)),
457
- (
458
- "subtitle",
459
- models.CharField(blank=True, default="", max_length=200, null=True),
460
- ),
461
- ("permalink", models.CharField(blank=True, max_length=200, null=True)),
462
- ("content", models.TextField()),
463
- ("language_code", models.CharField(db_index=True, max_length=15)),
464
- (
465
- "master",
466
- models.ForeignKey(
467
- editable=False,
468
- on_delete=django.db.models.deletion.CASCADE,
469
- related_name="translations",
470
- to="camomilla.Content",
471
- ),
472
- ),
473
- ],
474
- options={
475
- "db_table": "camomilla_content_translation",
476
- "db_tablespace": "",
477
- "abstract": False,
478
- "managed": True,
479
- "default_permissions": (),
480
- "unique_together": {("language_code", "master")},
481
- },
482
- ),
483
- migrations.CreateModel(
484
- name="CategoryTranslation",
485
- fields=[
486
- (
487
- "id",
488
- models.AutoField(
489
- auto_created=True,
490
- primary_key=True,
491
- serialize=False,
492
- verbose_name="ID",
493
- ),
494
- ),
495
- ("title", models.CharField(max_length=200)),
496
- ("description", models.TextField(blank=True, default="", null=True)),
497
- ("slug", models.SlugField()),
498
- ("language_code", models.CharField(db_index=True, max_length=15)),
499
- (
500
- "master",
501
- models.ForeignKey(
502
- editable=False,
503
- on_delete=django.db.models.deletion.CASCADE,
504
- related_name="translations",
505
- to="camomilla.Category",
506
- ),
507
- ),
508
- ],
509
- options={
510
- "db_table": "camomilla_category_translation",
511
- "db_tablespace": "",
512
- "abstract": False,
513
- "managed": True,
514
- "default_permissions": (),
515
- "unique_together": {
516
- ("language_code", "master"),
517
- ("title", "language_code"),
518
- },
519
- },
520
- ),
521
- migrations.CreateModel(
522
- name="ArticleTranslation",
523
- fields=[
524
- (
525
- "id",
526
- models.AutoField(
527
- auto_created=True,
528
- primary_key=True,
529
- serialize=False,
530
- verbose_name="ID",
531
- ),
532
- ),
533
- ("title", models.CharField(max_length=200)),
534
- ("description", models.TextField(blank=True, default="", null=True)),
535
- ("permalink", models.CharField(blank=True, max_length=200)),
536
- ("og_description", models.TextField(blank=True, default="", null=True)),
537
- (
538
- "og_title",
539
- models.CharField(blank=True, default="", max_length=200, null=True),
540
- ),
541
- (
542
- "og_type",
543
- models.CharField(blank=True, default="", max_length=200, null=True),
544
- ),
545
- (
546
- "og_url",
547
- models.CharField(blank=True, default="", max_length=200, null=True),
548
- ),
549
- (
550
- "canonical",
551
- models.CharField(blank=True, default="", max_length=200, null=True),
552
- ),
553
- ("content", models.TextField()),
554
- ("language_code", models.CharField(db_index=True, max_length=15)),
555
- (
556
- "master",
557
- models.ForeignKey(
558
- editable=False,
559
- on_delete=django.db.models.deletion.CASCADE,
560
- related_name="translations",
561
- to="camomilla.Article",
562
- ),
563
- ),
564
- ],
565
- options={
566
- "db_table": "camomilla_article_translation",
567
- "db_tablespace": "",
568
- "abstract": False,
569
- "managed": True,
570
- "default_permissions": (),
571
- "unique_together": {
572
- ("permalink", "language_code"),
573
- ("language_code", "master"),
574
- },
575
- },
576
- ),
577
- ]
@@ -1,33 +0,0 @@
1
- # Generated by Django 2.2.6 on 2020-02-14 11:27
2
-
3
- from django.db import migrations, models
4
-
5
-
6
- class Migration(migrations.Migration):
7
-
8
- dependencies = [
9
- ("camomilla", "0001_initial"),
10
- ]
11
-
12
- operations = [
13
- migrations.AlterField(
14
- model_name="articletranslation",
15
- name="content",
16
- field=models.TextField(default=""),
17
- ),
18
- migrations.AlterField(
19
- model_name="articletranslation",
20
- name="permalink",
21
- field=models.CharField(max_length=200),
22
- ),
23
- migrations.AlterField(
24
- model_name="contenttranslation",
25
- name="content",
26
- field=models.TextField(default=""),
27
- ),
28
- migrations.AlterField(
29
- model_name="contenttranslation",
30
- name="permalink",
31
- field=models.CharField(max_length=200, null=True),
32
- ),
33
- ]
@@ -1,30 +0,0 @@
1
- # Generated by Django 2.2.17 on 2021-01-30 16:10
2
-
3
- from django.db import migrations, models
4
- import django.db.models.deletion
5
-
6
-
7
- class Migration(migrations.Migration):
8
-
9
- dependencies = [
10
- ("camomilla", "0002_auto_20200214_1127"),
11
- ]
12
-
13
- operations = [
14
- migrations.AddField(
15
- model_name="mediafolder",
16
- name="path",
17
- field=models.TextField(blank=True, null=True),
18
- ),
19
- migrations.AlterField(
20
- model_name="mediafolder",
21
- name="updir",
22
- field=models.ForeignKey(
23
- blank=True,
24
- null=True,
25
- on_delete=django.db.models.deletion.CASCADE,
26
- related_name="child_folders",
27
- to="camomilla.MediaFolder",
28
- ),
29
- ),
30
- ]
@@ -1,25 +0,0 @@
1
- # Generated by Django 2.2.17 on 2021-05-11 09:37
2
-
3
- from django.db import migrations
4
- import django.db.models.manager
5
-
6
-
7
- class Migration(migrations.Migration):
8
-
9
- dependencies = [
10
- ("camomilla", "0003_auto_20210130_1610"),
11
- ]
12
-
13
- operations = [
14
- migrations.AlterModelManagers(
15
- name="article",
16
- managers=[
17
- ("objects", django.db.models.manager.Manager()),
18
- ("_plain_manager", django.db.models.manager.Manager()),
19
- ],
20
- ),
21
- migrations.RemoveField(
22
- model_name="article",
23
- name="trash",
24
- ),
25
- ]
@@ -1,19 +0,0 @@
1
- # Generated by Django 2.2.17 on 2021-12-15 12:47
2
-
3
- from ..fields import JSONField
4
- from django.db import migrations
5
-
6
-
7
- class Migration(migrations.Migration):
8
-
9
- dependencies = [
10
- ("camomilla", "0004_auto_20210511_0937"),
11
- ]
12
-
13
- operations = [
14
- migrations.AddField(
15
- model_name="media",
16
- name="image_props",
17
- field=JSONField(default=dict, blank=True),
18
- ),
19
- ]