Hello I encountered a problem which i am not able to solve by myself. I tried to call function create_with_celery inside create but it didnt work
How should I call create.delay with proper arguments? I don't know how to properly call create function to make workers create objects
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)
Im trying to do something like this but I get error "Object of type 'Article' is not JSON serializable"
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)