小编MrN*_*ame的帖子

Luigi - 覆盖任务需要/输入

我正在使用luigi执行一系列任务,如下所示:

class Task1(luigi.Task):
    stuff = luigi.Parameter()

    def output(self):
        return luigi.LocalTarget('test.json')

    def run(self):
        with self.output().open('w') as f:
            f.write(stuff)


class Task2(luigi.Task):
    stuff = luigi.Parameter()

    def requires(self):
        return Task1(stuff=self.stuff)

    def output(self):
        return luigi.LocalTarget('something-else.json')

    def run(self):
        with self.output().open('w') as f:
            f.write(stuff)
Run Code Online (Sandbox Code Playgroud)

当我像这样开始整个工作流程时,这完全符合要求:

luigi.build([Task2(stuff='stuff')])
Run Code Online (Sandbox Code Playgroud)

使用时,luigi.build您还可以通过显式传递参数来运行多个任务,如文档中的此示例所示.

但是,在我的情况下,我还希望能够Task2完全独立于其参与工作流程来运行业务逻辑.根据此示例requires,这适用于未实现的任务.

我的问题是,我如何将这种方法既作为工作流程的一部分,又作为工作流程的一部分运行?显然,我可以添加一个新的私有方法_my_custom_run,它获取数据并返回结果,然后使用这个方法run,但它只是感觉像应该被融入框架的东西,所以它让我觉得我是误解Luigi的最佳实践(仍在学习框架).任何建议表示赞赏,谢谢!

python pipeline luigi

5
推荐指数
1
解决办法
600
查看次数

DRF - 使用直通模型对 m2m 字段进行嵌套序列化

我在 DRF 中使用带有直通模型的 m2m 场。一切正常,除了当我尝试嵌套成员序列化程序时。

模型.py

class SweepStakes(models.Model):                                                          
    name = models.CharField(max_length=255)                                      

class Event(models.Model):                                                                       
    sweepstakes = models.ManyToManyField(SweepStakes, through='EventSweepStakesMembership')

class EventSweepStakesMembership(models.Model):                                  
    event = models.ForeignKey(Event, on_delete=models.CASCADE)                   
    sweepstakes = models.ForeignKey(SweepStakes, on_delete=models.CASCADE)       
    enabled = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)

序列化程序.py

class EventSweepStakesSerializer(serializers.ModelSerializer):                      
    name = serializers.ReadOnlyField(source='sweepstakes.name')                     

    class Meta:                                                                     
        model = EventSweepStakesMembership                                          
        fields = ('name', 'enabled',)

class EventSerializer(BaseTenantSerializer):                                                                     
    sweepstakes = EventSweepStakesSerializer(many=True, read_only=True)             

    class Meta:                                                                     
        model = Event                                                               
        fields = ('sweepstakes',)
Run Code Online (Sandbox Code Playgroud)

在这一点上,如果我将EventSweepStakesMembership模型和EventSweepStakesSerializer视图连接到一个视图,我会得到我期望的结果,输出如下:

{"name": "thingy", "enabled" true}
Run Code Online (Sandbox Code Playgroud)

但是,当我将Event模型和EventSerializer序列化程序挂接到视图中时,该sweepstakes字段返回一个空字典而不是嵌套表示,如下所示:

{"sweepstakes": [{}]}
Run Code Online (Sandbox Code Playgroud)

请注意,它不是一个空数组,换句话说,它确实看到了相关的直通模型,但只是在显示时没有正确序列化它。

没有错误,它只是空的。我曾尝试增加depth …

python django m2m django-rest-framework

4
推荐指数
1
解决办法
2243
查看次数

标签 统计

python ×2

django ×1

django-rest-framework ×1

luigi ×1

m2m ×1

pipeline ×1