为校验和组织一对一的关系

时间:2017-10-16 07:24:34

标签: django

的Django == 1.11.6

我想收集上传文件的校验和。 我是通过GenericRelation完成的。这很笨拙。 因为它是一对多的关系,而校验和肯定是一对一的。

您能否帮我理解这是否可以重写为一对一的关系?

ComponentB

1 个答案:

答案 0 :(得分:0)

您可以在FileChecksum中使GFK独一无二。

class FileChecksum(models.Model):
    ...
    class Meta:
        unique_together = ('object_id', 'content_type')

这意味着object_id和content_type的每个组合只能有一个FileChecksum。

修改

我建议从两个模型到FileChecksum都有OneToOne。没有理由这不起作用;唯一的缺点是没有一种简单的方法可以从FileChecksum返回到Image或ItemFile模型,但是你说你不关心它。

class ItemFile(models.Model):

    file = models.FileField(blank=False,
                            max_length=255,
                            upload_to=get_item_path,
                            verbose_name=_("file"))
    checksum = OneToOneField('FileChecksum')

class Image(models.Model):
    file = models.ImageField(blank=False,
                                   verbose_name=_("Image"),
                                   max_length=255,
                                   upload_to=get_sheet_path)
    checksum = OneToOneField('FileChecksum')


class FileChecksum(models.Model):
    checksum = models.CharField(blank=True,
                                null=False,
                                max_length=255,
                                verbose_name=_("checksum"))

    def __str__(self):
        return self.checksum