Странная ошибка при удалении действия в Django Admin.Я могу удалить объект из консоли, но не могу из панели администратора.Кажется, связано с полями.
class CategoryAdmin(DistributedAdminMixin, admin.ModelAdmin):
exclude = ('terminal',)
class ArticleAdmin(DistributedAdminMixin, admin.ModelAdmin):
exclude = ('terminal',)
list_display = ('title', 'is_displayed', 'category')
search_fields = ('title', 'category')
readonly_fields = ('created_by',)
admin.site.register(Category, CategoryAdmin)
admin.site.register(Article, ArticleAdmin)
Вот лог
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/contrib/admin/options.py", line 575, in wrapper
return self.admin_site.admin_view(view)(*args, **kwargs)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/utils/decorators.py", line 142, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/contrib/admin/sites.py", line 223, in inner
return view(request, *args, **kwargs)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/utils/decorators.py", line 62, in _wrapper
return bound_func(*args, **kwargs)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/utils/decorators.py", line 142, in _wrapped_view
response = view_func(request, *args, **kwargs)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/utils/decorators.py", line 58, in bound_func
return func.__get__(self, type(self))(*args2, **kwargs2)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1618, in changelist_view
response = self.response_action(request, queryset=cl.get_queryset(request))
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/contrib/admin/options.py", line 1331, in response_action
response = func(self, request, queryset)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/contrib/admin/actions.py", line 36, in delete_selected
queryset, opts, request.user, modeladmin.admin_site, using)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/contrib/admin/utils.py", line 131, in get_deleted_objects
collector.collect(objs)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/contrib/admin/utils.py", line 195, in collect
return super().collect(objs, source_attr=source_attr, **kwargs)
File "/home/artem/Projects/carbon-delta-lab/.venv/lib/python3.6/site-packages/django/db/models/deletion.py", line 222, in collect
field.remote_field.on_delete(self, field, sub_objs, self.using)
TypeError: 'str' object is not callable
Код модели, который вы видите выше.Для связи по внешнему ключу используется CASCADE один ко многим
class Category(DistributedModel):
"""
Model that represents categories for methodologies
"""
title = models.CharField(
max_length=200
)
def __str__(self):
return self.title
# Standard file download via /media is disallowed.
fs = FileSystemStorage(location=settings.METHODOLOGIES_FILE_DIR)
class Article(DistributedModel):
"""
Article model that represents Methodology description.
It is used on 1. terminal methodology page and
2. methodologies list page
"""
title = models.CharField(
max_length=200,
help_text="Title displayed on both methodology page and methodologies list pages."
)
slug = models.SlugField(
unique=True,
help_text="What should be the unique identifying key word in the url of the page?")
short_text = models.TextField(
max_length=500, help_text="Short summary displayed only in preview box on methodologies list page. "
"Max 500 chars."
)
full_text = models.TextField(
help_text="Full article displayed only on terminal methodology page."
)
image = models.ImageField(
null=True,
blank=True,
help_text="Recommended width at least 1200px. Please prefer to add images. "
"Image used on both pages."
)
button_text = models.CharField(
default='SHOW MORE',
max_length=100
)
category = models.ForeignKey(
Category,
on_delete="CASCADE"
)
related_articles = models.ManyToManyField(
"self",
blank=True,
help_text="Links of these articles will be displayed at the bottom of the page. "
"If empty, articles of the same category will be displayed. "
)
file = models.FileField(
blank=True,
null=True,
storage=fs,
help_text="Upload pdf, doc, xlsx, etc. related to this article. Files will be attached to the end "
"of the article for download. "
)
created = models.DateTimeField(
auto_now_add=True
)
modified = models.DateTimeField(
auto_now=True
)
created_by = models.ForeignKey(
User,
null=True,
blank=True,
on_delete="SET_NULL"
)
is_displayed = models.BooleanField(
default=False
)
def save(self, *args, **kwargs):
if not self.created_by:
# using threadlocals is bad
self.created_by = get_current_user()
super(Article, self).save(*args, **kwargs)
Может, это связано с базой данных?Но кажется, что он не проходит перед любым запросом к БД