release_date = models.DateField()
- пропущены скобки, и также в некоторых аналогичных полях. Подозреваю также, что должно быть blank=True, null=True
.id_song, id_genre, ...
- лишние. Django сама создаёт первичный ключ с именем id
для каждой таблицы.blank=True
, иначе - они все являются обязательными к заполнению.Album
как мне кажется должен быть отдельной таблицей, связываемой по foreign key.from django.contrib import messages
class MyAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if blablabla:
messages.add_message('Category already exists.', level=messages.INFO)
else:
return super(MyAdmin, self).save_model(request, obj, form, change)
unique=True
полю имени категории. post_save
выполняется после сохранения объекта. Вы сохранили объект, а потом записали ему свойство instance.slug
. Повторного сохранения не производится. И не должно производиться, на самом деле, - иначе у вас получится бесконечная рекурсия. Попробуйте сигнал pre_save
, тогда после вашего обработчика объект будет сохранён и вуаля.Category
- ваша, то можно напрямую переопределить def save(self, *args, **kwargs)
в ней.parent
уже изменён. Я бы делал это примерно так.class MyModel(models.Model):
def __init__(self, *args, **kwargs):
super(MyModel, self).__init__(*args, **kwargs)
self._initial_parent = self.parent
def save(self, *args, **kwargs):
new_parent = self.parent
if new_parent != self._initial_parent:
# Marking old branch as obsolete
self.descendants().update(is_deleted=True)
# Now, creating a new branch (with new IDs) at the destination node
root = MyModel.objects.create(parent=new_parent, ...)
[MyModel.objects.create(...) ...]
# And cancelling the moving of the current element
self.parent = self._initial_parent
self.is_deleted = True
return super(MyModel, self).save(*args, **kwargs)
your_project_root/your_project_name/settings/
├── base.py
├── development.py
├── __init__.py
├── local.py
├── production.py
└── testing.py
from .testing import *
DATABASES = ...
from .local import *
obj = super(FullView, self).get_object()
if self.request.user.is_anonymous and obj.article_access:
raise PermissionDenied
else:
return obj
sections = list(Section.objects.filter(project=project, ...))
users = list(ProfileUser.objects.filter(...))
cells = [[user] + [
ProfileUserSection.objects.filter(user=user, section=section).count() for section in sections
] for user in users]
context = {
'sections': sections,
'rows': cells
}
{% for row in rows %}
<tr>
{% for cell in row %}
<td>{{ cell }}</td>
{% endfor %}
</tr>
class MyAdmin(admin.ModelAdmin):
fields = ['name', 'slug', 'date']
readonly_fields = ['date']
def has_add_permission(self):
# Убрать право добавлять новые элементы
return False
def get_readonly_fields(self, request, obj=None):
if obj and obj.pk:
return self.fields
else:
return self.readonly_fields