I am trying to figure out, how to get the created post id, so I could use it later to send an email to subscribers. But the system is giving me an error, that says the following:
Traceback (most recent call last):
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\celery\app\trace.py", line 405, in trace_task
R = retval = fun(*args, **kwargs)
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\celery\app\trace.py", line 697, in __protected_call__
return self.run(*args, **kwargs)
File "C:\Users\1224095\skillfactory\Testing2\NewsPaper\News\tasks.py", line 12, in Post_send
post = Post.objects.get(id=oid)
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\query.py", line 431, in get
num = len(clone)
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\query.py", line 262, in __len__
self._fetch_all()
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\query.py", line 1324, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\query.py", line 51, in __iter__
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1167, in execute_sql
cursor = self.connection.cursor()
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\utils\asyncio.py", line 26, in inner
return func(*args, **kwargs)
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\backends\base\base.py", line 259, in cursor
return self._cursor()
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\backends\base\base.py", line 237, in _cursor
return self._prepare_cursor(self.create_cursor(name))
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\backends\base\base.py", line 227, in _prepare_cursor
self.validate_thread_sharing()
File "c:\users\1224095\skillfactory\testing2\venv\lib\site-packages\django\db\backends\base\base.py", line 552, in validate_thread_sharing
raise DatabaseError(
django.db.utils.DatabaseError: DatabaseWrapper objects created in a thread can only be used in that same thread. The object with alias 'default' was created in thread id 2281649653888 and
this is thread id 2281728636176.
my views.py
def form_valid(self, form):
news_day_limit = 3
author = Author.objects.get(author=self.request.user)
form.instance.author = author
post = form.save()
post.save()
Post_send.apply_async([post.id], countdown=1)
my tasks.py
@shared_task
def Post_send(oid):
post = Post.objects.get(id=oid)
post_subscribers = post.category.subscribers.all()
address = []
for a in post_subscribers:
address.append(a.email)
for user_id in list(post.category.subscribers.all().values_list('subscriber', flat=True)):
user = User.objects.get(id=user_id)
html_content = render_to_string(
'message_for_subscribers.html',
{
'text': post.text,
'title': post.title,
'category': post.category,
'username': user.username,
'link': f'http://127.0.0.1:8000/Posts/{post.id}',
})
msg = EmailMultiAlternatives(
subject='New post coming to you',
from_email='gregtmj@gmail.com',
to=[*address], # это то же, что и recipients_list
)
msg.attach_alternative(html_content, "text/html") # добавляем html
msg.send()
return redirect('/posts')
and ofc every function is imported. I am taking a guess, that I am not connecting the post id with the tasks, but still, this code is runing perfectly, if I am using appscheduler instead.