【问题标题】:How do you access mixin methods for Django models when doing a South datamigration?在进行 South 数据迁移时,如何访问 Django 模型的 mixin 方法?
【发布时间】:2015-09-16 02:48:21
【问题描述】:

我的 Django 模型有一个提供 to_json 方法的 mixin:

class Tile(models.Model, SerializableMixin):
    flooring = models.ForeignKey('Flooring', related_name='tiles')
    ...

如何在我的数据迁移中访问它?

class Migration(DataMigration):
    def forwards(self, orm):
        tiles = orm.Tile.objects.filter(flooring__name="white")
        for tile in tiles:
            tile.cache = tile.to_json() # AttributeError, no attribute to_json
            tile.save(update_fields=['cache'])

【问题讨论】:

    标签: python django mixins django-south data-migration


    【解决方案1】:

    我的解决方案是将 orm 模型转换为我的模型的实例,执行需要 mixin 的操作并将结果保存到 orm 模型。

    from apps.flooring.models import Tile
    
    class Migration(DataMigration):
        def forwards(self, orm):
            tiles = orm.Tile.objects.filter(flooring__name="white")
            for tile in tiles:
                # Convert orm.Tile into Tile model to access serialization mixin
                t = Tile(**{k:v for (k,v) in t.__dict__.iteritems() if not k.startswith('_')})
    
                # update the orm.Tile model with new cache
                tile.cache = t.to_json()
                tile.save(update_fields=['cache'])
    

    【讨论】:

    • 我回答了我自己的问题,因为没有关于 django 模型 mixins 和 South 的相关问题。 South 鼓励你使用 orm 模型,这被证明是为了完成任务的误导。如果你有更好或更笼统的答案,请贡献,我会给你赏金!
    最近更新 更多