Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-wiki
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
django-wiki
Commits
eea0c43d
Commit
eea0c43d
authored
Jul 19, 2014
by
benjaoming
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
notifications plugin form to use django-nyt and management command to recreate notifications
parent
6f13af4d
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
219 additions
and
17 deletions
+219
-17
testproject/testproject/db/prepopulated-customauthuser.db
+0
-0
testproject/testproject/db/prepopulated.db
+0
-0
wiki/plugins/notifications/forms.py
+26
-12
wiki/plugins/notifications/management/__init__.py
+0
-0
wiki/plugins/notifications/management/commands/__init__.py
+0
-0
wiki/plugins/notifications/management/commands/default_notifications.py
+36
-0
wiki/plugins/notifications/models.py
+2
-5
wiki/plugins/notifications/south_migrations/0003_auto__del_field_articlesubscription_subscription_ptr__chg_field_articl.py
+155
-0
No files found.
testproject/testproject/db/prepopulated-customauthuser.db
0 → 100644
View file @
eea0c43d
File added
testproject/testproject/db/prepopulated.db
0 → 100644
View file @
eea0c43d
File added
wiki/plugins/notifications/forms.py
View file @
eea0c43d
...
@@ -3,7 +3,7 @@ from django import forms
...
@@ -3,7 +3,7 @@ from django import forms
from
django.forms.models
import
modelformset_factory
,
BaseModelFormSet
from
django.forms.models
import
modelformset_factory
,
BaseModelFormSet
from
django.utils.translation
import
ugettext
as
_
from
django.utils.translation
import
ugettext
as
_
from
django_nyt.models
import
Settings
,
NotificationType
from
django_nyt.models
import
Settings
,
NotificationType
,
Subscription
from
django_nyt
import
settings
as
notify_settings
from
django_nyt
import
settings
as
notify_settings
from
django.contrib.contenttypes.models
import
ContentType
from
django.contrib.contenttypes.models
import
ContentType
from
django.utils.safestring
import
mark_safe
from
django.utils.safestring
import
mark_safe
...
@@ -131,18 +131,19 @@ class SubscriptionForm(PluginSettingsFormMixin, forms.Form):
...
@@ -131,18 +131,19 @@ class SubscriptionForm(PluginSettingsFormMixin, forms.Form):
)[
0
]
)[
0
]
self
.
edit_notifications
=
models
.
ArticleSubscription
.
objects
.
filter
(
self
.
edit_notifications
=
models
.
ArticleSubscription
.
objects
.
filter
(
article
=
article
,
article
=
article
,
notification_type
=
self
.
notification_type
subscription__notification_type
=
self
.
notification_type
,
subscription__settings__user
=
self
.
user
,
)
)
self
.
default_settings
=
Settings
.
objects
.
get_or_create
(
self
.
default_settings
=
Settings
.
objects
.
get_or_create
(
user
=
request
.
user
,
user
=
request
.
user
,
interval
=
notify_settings
.
INTERVALS_DEFAULT
interval
=
notify_settings
.
INTERVALS_DEFAULT
)[
0
]
)[
0
]
if
self
.
edit_notifications
:
if
self
.
edit_notifications
:
self
.
default_settings
=
self
.
edit_notifications
[
0
]
.
settings
self
.
default_settings
=
self
.
edit_notifications
[
0
]
.
s
ubscription
.
s
ettings
if
not
initial
:
if
not
initial
:
initial
=
{
initial
=
{
'edit'
:
bool
(
self
.
edit_notifications
),
'edit'
:
bool
(
self
.
edit_notifications
),
'edit_email'
:
bool
(
self
.
edit_notifications
.
filter
(
send_emails
=
True
)),
'edit_email'
:
bool
(
self
.
edit_notifications
.
filter
(
s
ubscription__s
end_emails
=
True
)),
'settings'
:
self
.
default_settings
,
'settings'
:
self
.
default_settings
,
}
}
kwargs
[
'initial'
]
=
initial
kwargs
[
'initial'
]
=
initial
...
@@ -163,13 +164,26 @@ class SubscriptionForm(PluginSettingsFormMixin, forms.Form):
...
@@ -163,13 +164,26 @@ class SubscriptionForm(PluginSettingsFormMixin, forms.Form):
if
not
self
.
changed_data
:
if
not
self
.
changed_data
:
return
return
if
cd
[
'edit'
]:
if
cd
[
'edit'
]:
edit_notification
=
models
.
ArticleSubscription
.
objects
.
get_or_create
(
try
:
article
=
self
.
article
,
edit_notification
=
models
.
ArticleSubscription
.
objects
.
get
(
notification_type
=
self
.
notification_type
,
subscription__notification_type
=
self
.
notification_type
,
settings
=
cd
[
'settings'
],
article
=
self
.
article
,
)[
0
]
subscription__settings
=
cd
[
'settings'
],
edit_notification
.
settings
=
cd
[
'settings'
]
)
edit_notification
.
send_emails
=
cd
[
'edit_email'
]
edit_notification
.
subscription
.
send_emails
=
cd
[
'edit_email'
]
edit_notification
.
save
()
edit_notification
.
subscription
.
save
()
except
models
.
ArticleSubscription
.
DoesNotExist
:
subscription
,
__
=
Subscription
.
objects
.
get_or_create
(
settings
=
cd
[
'settings'
],
notification_type
=
self
.
notification_type
,
object_id
=
self
.
article
.
id
,
)
edit_notification
=
models
.
ArticleSubscription
.
objects
.
create
(
subscription
=
subscription
,
article
=
self
.
article
,
)
subscription
.
send_emails
=
cd
[
'edit_email'
]
subscription
.
save
()
else
:
else
:
self
.
edit_notifications
.
delete
()
self
.
edit_notifications
.
delete
()
wiki/plugins/notifications/management/__init__.py
0 → 100644
View file @
eea0c43d
wiki/plugins/notifications/management/commands/__init__.py
0 → 100644
View file @
eea0c43d
wiki/plugins/notifications/management/commands/default_notifications.py
0 → 100644
View file @
eea0c43d
from
django.contrib.contenttypes.models
import
ContentType
from
django.core.management.base
import
BaseCommand
from
wiki.plugins.notifications.settings
import
ARTICLE_EDIT
from
wiki.plugins.notifications.models
import
ArticleSubscription
from
wiki.models
import
ArticleRevision
,
Article
from
django_nyt.utils
import
subscribe
from
django_nyt.models
import
Settings
class
Command
(
BaseCommand
):
# @ReservedAssignment
help
=
'Creates notifications for all article revision authors'
def
handle
(
self
,
*
args
,
**
options
):
user_settings
=
{}
content_type
=
ContentType
.
objects
.
get_for_model
(
Article
)
for
revision
in
ArticleRevision
.
objects
.
filter
(
deleted
=
False
)
.
exclude
(
user
=
None
):
if
not
revision
.
user
in
user_settings
:
user_settings
[
revision
.
user
],
__
=
Settings
.
objects
.
get_or_create
(
user
=
revision
.
user
)
subscription
=
subscribe
(
user_settings
[
revision
.
user
],
ARTICLE_EDIT
,
content_type
=
content_type
,
)
ArticleSubscription
.
objects
.
get_or_create
(
subscription
=
subscription
,
article
=
revision
.
article
)
wiki/plugins/notifications/models.py
View file @
eea0c43d
...
@@ -17,11 +17,7 @@ from wiki.plugins.notifications.util import get_title
...
@@ -17,11 +17,7 @@ from wiki.plugins.notifications.util import get_title
class
ArticleSubscription
(
ArticlePlugin
):
class
ArticleSubscription
(
ArticlePlugin
):
subscription_ptr
=
models
.
OneToOneField
(
subscription
=
models
.
OneToOneField
(
Subscription
)
Subscription
,
related_name
=
'deprecated_subscriptions'
,
db_column
=
'subscription_ptr'
)
subscription
=
models
.
OneToOneField
(
Subscription
,
null
=
True
)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
title
=
(
_
(
"
%(user)
s subscribing to
%(article)
s (
%(type)
s)"
)
%
title
=
(
_
(
"
%(user)
s subscribing to
%(article)
s (
%(type)
s)"
)
%
...
@@ -31,6 +27,7 @@ class ArticleSubscription(ArticlePlugin):
...
@@ -31,6 +27,7 @@ class ArticleSubscription(ArticlePlugin):
return
unicode
(
title
)
return
unicode
(
title
)
class
Meta
:
class
Meta
:
unique_together
=
(
'subscription'
,
'articleplugin_ptr'
)
if
settings
.
APP_LABEL
:
if
settings
.
APP_LABEL
:
app_label
=
settings
.
APP_LABEL
app_label
=
settings
.
APP_LABEL
...
...
wiki/plugins/notifications/south_migrations/0003_auto__del_field_articlesubscription_subscription_ptr__chg_field_articl.py
0 → 100644
View file @
eea0c43d
# -*- coding: utf-8 -*-
from
south.utils
import
datetime_utils
as
datetime
from
south.db
import
db
from
south.v2
import
SchemaMigration
from
django.db
import
models
class
Migration
(
SchemaMigration
):
def
forwards
(
self
,
orm
):
# Deleting field 'ArticleSubscription.subscription_ptr'
db
.
delete_column
(
u'notifications_articlesubscription'
,
u'subscription_ptr'
)
try
:
db
.
delete_column
(
u'notifications_articlesubscription'
,
u'subscription_ptr_id'
)
except
Exception
:
# Don't care if it doesn't exist but it may on migrations from
# before 0.0.24
pass
# Changing field 'ArticleSubscription.subscription'
db
.
alter_column
(
u'notifications_articlesubscription'
,
'subscription_id'
,
self
.
gf
(
'django.db.models.fields.related.OneToOneField'
)(
default
=
1
,
to
=
orm
[
'django_nyt.Subscription'
],
unique
=
True
))
# Adding unique constraint on 'ArticleSubscription', fields ['subscription', u'articleplugin_ptr']
db
.
create_unique
(
u'notifications_articlesubscription'
,
[
'subscription_id'
,
u'articleplugin_ptr_id'
])
def
backwards
(
self
,
orm
):
# Removing unique constraint on 'ArticleSubscription', fields ['subscription', u'articleplugin_ptr']
db
.
delete_unique
(
u'notifications_articlesubscription'
,
[
'subscription_id'
,
u'articleplugin_ptr_id'
])
# Adding field 'ArticleSubscription.subscription_ptr'
db
.
add_column
(
u'notifications_articlesubscription'
,
'subscription_ptr'
,
self
.
gf
(
'django.db.models.fields.related.OneToOneField'
)(
default
=
1
,
related_name
=
u'deprecated_subscriptions'
,
unique
=
True
,
db_column
=
u'subscription_ptr'
,
to
=
orm
[
'django_nyt.Subscription'
]),
keep_default
=
False
)
# Changing field 'ArticleSubscription.subscription'
db
.
alter_column
(
u'notifications_articlesubscription'
,
'subscription_id'
,
self
.
gf
(
'django.db.models.fields.related.OneToOneField'
)(
to
=
orm
[
'django_nyt.Subscription'
],
unique
=
True
,
null
=
True
))
models
=
{
u'auth.group'
:
{
'Meta'
:
{
'object_name'
:
'Group'
},
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'80'
}),
'permissions'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'to'
:
u"orm['auth.Permission']"
,
'symmetrical'
:
'False'
,
'blank'
:
'True'
})
},
u'auth.permission'
:
{
'Meta'
:
{
'ordering'
:
"(u'content_type__app_label', u'content_type__model', u'codename')"
,
'unique_together'
:
"((u'content_type', u'codename'),)"
,
'object_name'
:
'Permission'
},
'codename'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'content_type'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
u"orm['contenttypes.ContentType']"
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'50'
})
},
u'auth.user'
:
{
'Meta'
:
{
'object_name'
:
'User'
},
'date_joined'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'default'
:
'datetime.datetime.now'
}),
'email'
:
(
'django.db.models.fields.EmailField'
,
[],
{
'max_length'
:
'75'
,
'blank'
:
'True'
}),
'first_name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
,
'blank'
:
'True'
}),
'groups'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'to'
:
u"orm['auth.Group']"
,
'symmetrical'
:
'False'
,
'blank'
:
'True'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'is_active'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'True'
}),
'is_staff'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'is_superuser'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'last_login'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'default'
:
'datetime.datetime.now'
}),
'last_name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'30'
,
'blank'
:
'True'
}),
'password'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'128'
}),
'user_permissions'
:
(
'django.db.models.fields.related.ManyToManyField'
,
[],
{
'to'
:
u"orm['auth.Permission']"
,
'symmetrical'
:
'False'
,
'blank'
:
'True'
}),
'username'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'30'
})
},
u'contenttypes.contenttype'
:
{
'Meta'
:
{
'ordering'
:
"('name',)"
,
'unique_together'
:
"(('app_label', 'model'),)"
,
'object_name'
:
'ContentType'
,
'db_table'
:
"'django_content_type'"
},
'app_label'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'model'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
}),
'name'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'100'
})
},
u'django_nyt.notification'
:
{
'Meta'
:
{
'ordering'
:
"('-id',)"
,
'object_name'
:
'Notification'
,
'db_table'
:
"'nyt_notification'"
},
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'is_emailed'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'is_viewed'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'message'
:
(
'django.db.models.fields.TextField'
,
[],
{}),
'occurrences'
:
(
'django.db.models.fields.PositiveIntegerField'
,
[],
{
'default'
:
'1'
}),
'subscription'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
u"orm['django_nyt.Subscription']"
,
'null'
:
'True'
,
'on_delete'
:
'models.SET_NULL'
,
'blank'
:
'True'
}),
'url'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'200'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
u"orm['auth.User']"
,
'null'
:
'True'
,
'blank'
:
'True'
})
},
u'django_nyt.notificationtype'
:
{
'Meta'
:
{
'object_name'
:
'NotificationType'
,
'db_table'
:
"'nyt_notificationtype'"
},
'content_type'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
u"orm['contenttypes.ContentType']"
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'key'
:
(
'django.db.models.fields.CharField'
,
[],
{
'unique'
:
'True'
,
'max_length'
:
'128'
,
'primary_key'
:
'True'
}),
'label'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'128'
,
'null'
:
'True'
,
'blank'
:
'True'
})
},
u'django_nyt.settings'
:
{
'Meta'
:
{
'object_name'
:
'Settings'
,
'db_table'
:
"'nyt_settings'"
},
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'interval'
:
(
'django.db.models.fields.SmallIntegerField'
,
[],
{
'default'
:
'0'
}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
u"orm['auth.User']"
})
},
u'django_nyt.subscription'
:
{
'Meta'
:
{
'object_name'
:
'Subscription'
,
'db_table'
:
"'nyt_subscription'"
},
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'latest'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"'latest_for'"
,
'null'
:
'True'
,
'to'
:
u"orm['django_nyt.Notification']"
}),
'notification_type'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
u"orm['django_nyt.NotificationType']"
}),
'object_id'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'64'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'send_emails'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'True'
}),
'settings'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
u"orm['django_nyt.Settings']"
})
},
'notifications.articlesubscription'
:
{
'Meta'
:
{
'unique_together'
:
"((u'subscription', u'articleplugin_ptr'),)"
,
'object_name'
:
'ArticleSubscription'
,
'_ormbases'
:
[
'wiki.ArticlePlugin'
]},
u'articleplugin_ptr'
:
(
'django.db.models.fields.related.OneToOneField'
,
[],
{
'to'
:
"orm['wiki.ArticlePlugin']"
,
'unique'
:
'True'
,
'primary_key'
:
'True'
}),
'subscription'
:
(
'django.db.models.fields.related.OneToOneField'
,
[],
{
'to'
:
u"orm['django_nyt.Subscription']"
,
'unique'
:
'True'
})
},
'wiki.article'
:
{
'Meta'
:
{
'object_name'
:
'Article'
},
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'current_revision'
:
(
'django.db.models.fields.related.OneToOneField'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"u'current_set'"
,
'unique'
:
'True'
,
'null'
:
'True'
,
'to'
:
"orm['wiki.ArticleRevision']"
}),
'group'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
u"orm['auth.Group']"
,
'null'
:
'True'
,
'on_delete'
:
'models.SET_NULL'
,
'blank'
:
'True'
}),
'group_read'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'True'
}),
'group_write'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'True'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'modified'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
}),
'other_read'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'True'
}),
'other_write'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'True'
}),
'owner'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'blank'
:
'True'
,
'related_name'
:
"u'owned_articles'"
,
'null'
:
'True'
,
'on_delete'
:
'models.SET_NULL'
,
'to'
:
u"orm['auth.User']"
})
},
'wiki.articleplugin'
:
{
'Meta'
:
{
'object_name'
:
'ArticlePlugin'
},
'article'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['wiki.Article']"
}),
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'deleted'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
})
},
'wiki.articlerevision'
:
{
'Meta'
:
{
'ordering'
:
"(u'created',)"
,
'unique_together'
:
"((u'article', u'revision_number'),)"
,
'object_name'
:
'ArticleRevision'
},
'article'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['wiki.Article']"
}),
'automatic_log'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'content'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
}),
'created'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now_add'
:
'True'
,
'blank'
:
'True'
}),
'deleted'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
u'id'
:
(
'django.db.models.fields.AutoField'
,
[],
{
'primary_key'
:
'True'
}),
'ip_address'
:
(
'django.db.models.fields.IPAddressField'
,
[],
{
'max_length'
:
'15'
,
'null'
:
'True'
,
'blank'
:
'True'
}),
'locked'
:
(
'django.db.models.fields.BooleanField'
,
[],
{
'default'
:
'False'
}),
'modified'
:
(
'django.db.models.fields.DateTimeField'
,
[],
{
'auto_now'
:
'True'
,
'blank'
:
'True'
}),
'previous_revision'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
"orm['wiki.ArticleRevision']"
,
'null'
:
'True'
,
'on_delete'
:
'models.SET_NULL'
,
'blank'
:
'True'
}),
'revision_number'
:
(
'django.db.models.fields.IntegerField'
,
[],
{}),
'title'
:
(
'django.db.models.fields.CharField'
,
[],
{
'max_length'
:
'512'
}),
'user'
:
(
'django.db.models.fields.related.ForeignKey'
,
[],
{
'to'
:
u"orm['auth.User']"
,
'null'
:
'True'
,
'on_delete'
:
'models.SET_NULL'
,
'blank'
:
'True'
}),
'user_message'
:
(
'django.db.models.fields.TextField'
,
[],
{
'blank'
:
'True'
})
}
}
complete_apps
=
[
'notifications'
]
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment