【问题标题】:Why does Django Celery task is showing a "attribute error"?为什么 Django Celery 任务显示“属性错误”?
【发布时间】:2019-04-11 23:28:50
【问题描述】:

当我运行下面的代码时,Django 抛出一个包装器错误,错误代码如下所示

错误信息:

AttributeError: 'method-wrapper' 对象没有属性 'module'

Models.py
class PatientMasters(models.Model):
    patient_id = models.AutoField(primary_key=True)
    patient_n_key = models.CharField(max_length=15, blank=True, unique=True)
    centre_master_short_name = models.CharField(blank=False, max_length=33)
    centre_master_id = models.CharField(blank=False, max_length=15)
    pid_no = models.CharField(max_length=45, blank=True, null=True)
    aadhar_number = models.CharField(max_length=45, blank=True, null=True)
    date_of_registration = models.BigIntegerField()
    patient_name = models.CharField(max_length=45,blank=False)
    gender = models.CharField(max_length=45,blank=False)
    patient_category = models.CharField(max_length=45, blank=True, null=True)
    age = models.IntegerField(blank=False)
    class Meta:
        managed = False
        db_table = 'patient_masters'

@receiver(post_save, sender=PatientMasters)
def generate_pat_unique_key(sender, instance, created, **kwargs):
   """
       Generate unique n_key as an combination of primary key and centre_master_id
   """
   post_save.disconnect(generate_pat_unique_key, sender=PatientMasters)
   instance.patient_n_key = "{}-pat-{}".format(instance.centre_master_short_name, instance.patient_id)
   instance.save()
   post_save.connect(generate_pat_unique_key, sender=PatientMasters)


Views.py

class PatientMastersviewset(viewsets.ModelViewSet):
    queryset=models.PatientMasters.objects.all()
    serializer_class=serializers1.PatientMastersserializer
    lookup_field = 'patient_n_key'
    tasks.PatientMastersviewset.delay()


tasks.py
@app.task
class PatientMastersviewset(viewsets.ModelViewSet):
    queryset=models.PatientMasters.objects.all()
    serializer_class=serializers1.PatientMastersserializer
    lookup_field = 'patient_n_key'

【问题讨论】:

  • 你为什么使用视图集作为 Celery 任务?这没有任何意义。你期待它做什么?
  • 我有一个仪表板页面,它从 10 个不同的 url 获取数据它花费了太多时间加载数据我想加快它如何实现

标签: python django python-3.x django-rest-framework celery


【解决方案1】:

我可以回答 2 个:

  1. 也许您想在tasks.py 的某个位置添加self

@app.task(bind=True)

def patient_masters_viewset_task(self):
    queryset = models.PatientMasters.objects.all()
  1. 您更喜欢 LazyLoading 方法,它会以一种普通的方法(js 中的同步/等待、Promise...)检索您想要的内容,而且这不是问的正确地方:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2018-08-03
    • 2021-03-06
    相关资源
    最近更新 更多