![](/img/trans.png)
[英]Create class based Celery task for reusable app in Django project
[英]Create Object (in ViewSet class) with Celery Task in Django
您好,我遇到了一个我自己无法解决的问题。 我试图在 create 中调用 function create_with_celery 但它没有用
我应该如何使用正确的 arguments 调用 create.delay? 我不知道如何正确调用 create function 让工人创建对象
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)
您只能传递 JSON 中支持的基本类型。
请记住,celery 是处理异步数据的好工具,正如我看到您尝试在ArticleViewSet
上所做的那样,您可以直接在ArticleSerializer
的 save 方法上实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.