Здравствуйте, я столкнулся с проблемой, которую не могу решить самостоятельно. Я попытался вызвать функцию create_with_celery внутри create, но она не сработала
Как мне вызвать create.delay с правильными аргументами? Я не знаю, как правильно вызвать функцию create, чтобы работники создавали объекты
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
@app.task(bind=True)
def create(self, request):
article = Article.objects.create(link=request.data['link'])
article.save()
serializer = ArticleSerializer(article, many=False)
words = WordList(article.link)
# take every 90nth word for faster loading only dev approach
i = 0
for word in range(0, len(words.list)):
# try to take word from database
i += 1
try:
existing_word = Word.objects.filter(name=words[word])
Word.objects.create(
name=existing_word[0].name,
advance_level=existing_word[0].advance_level,
definition=existing_word[0].definition,
article=Article.objects.get(id=article.id)
)
print('word nr {}/{} "{}" created from database'.format(i,
len(words.list), words[word]))
except:
# if it's not existing fetch data from web
Word.objects.create(
name=words[word],
advance_level=get_word_frequency(words[word]),
definition=get_word_definition(words[word]),
article=Article.objects.get(id=article.id)
)
print('word nr {}/{} "{}" fetched from web'.format(i,
len(words.list), words[word]))
response = {'message': 'Article created ', 'result': serializer.data}
return Response(response, status=status.HTTP_200_OK)
Я пытаюсь сделать что-то подобное, но получаю сообщение об ошибке «Объект типа 'Article' не JSON сериализуем»
class ArticleViewSet(viewsets.ModelViewSet):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
@app.task(bind=True)
def create_with_celery(self, article, serializer, words, req):
i = 0
for word in range(0, len(words.list)):
# try to take word from database
i += 1
try:
existing_word = Word.objects.filter(name=words[word])
Word.objects.create(
name=existing_word[0].name,
advance_level=existing_word[0].advance_level,
definition=existing_word[0].definition,
article=Article.objects.get(id=article.id)
)
print('word nr {}/{} "{}" created from database'.format(i,
len(words.list), words[word]))
except:
# if it's not existing fetch data from web
Word.objects.create(
name=words[word],
advance_level=get_word_frequency(words[word]),
definition=get_word_definition(words[word]),
article=Article.objects.get(id=article.id)
)
print('word nr {}/{} "{}" fetched from web'.format(i,len(words.list), words[word]))
def create(self, request):
article = Article.objects.create(link=request.data['link'])
article.save()
serializer = ArticleSerializer(article, many=False)
words = WordList(article.link)
req = request
self.create_with_celery.delay(article, serializer, words, req)
response = {'message': 'Article created ', 'result': serializer.data}
return Response(response, status=status.HTTP_200_OK)