用于在django中创建和更新相关模型的模式

时间:2016-08-08 13:39:15

标签: python django design-patterns django-models

假设我有两个models

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

class Photo(models.Model):
    album = models.ForeignKey(to=PhotoAlbum)
    photo = models.ImageField(upload_to=".")

我希望给用户一个表格,他可以在表格中提供"名称"相册,我有一些逻辑,如何用给定名称的照片创建相册。我假设我需要在这里创建一些额外的服务:

class PhotoAlbumService:
    def __init__(self, album):
        self._album = album
        self._photos = list(self._album.photo_set.all())

    def create(self):
        # creation logic here
        # some common function for creation and updating

    def update(self):
        # updating logic here
        # again the common function for creation and updating
        # additional unique logic for updating

    def _update_only_method(self):
        # will be called only on update

    def _common_logic(self):
        # common logic both for create and update

并在我的views.py我正在为创作做这样的事情:

AlbumService(Album(name="user_provided_name")).create()

并进行更新:

AlbumService(Album.objects.get(pk=1)).update()

但我很困惑,因为,例如,创作 - 我不需要有一个照片列表(创建前没有照片)和方法,只用于更新不需要创建。此外 - 在每次创建或更新时,都会创建新的服务实例。我对这种行为绝对不满意。也许有一些有用的模式可以规范这种行为?

UPD

为什么我没有使用过经理?据我所知 - 管理人员用于"表级"操作,但在这里我有几张桌子。此外,现有专辑的更新是"行级"操作,因此它应该作为模型方法存在。但我认为这个操作应该是耦合的

0 个答案:

没有答案