的Django == 1.11.6
我想收集上传文件的校验和。 我是通过GenericRelation完成的。这很笨拙。 因为它是一对多的关系,而校验和肯定是一对一的。
您能否帮我理解这是否可以重写为一对一的关系?
ComponentB
答案 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