如何正确管理Django模型关系?

我在这里制作一些旅游套票系统。一个套票有画廊。当然画廊会有多个图像,所以我决定在这里使用ManyToOne关系。但是我也想到了使用OneToOne这两个模型之间的关系,因为我们可以通过Django表单一次上传多个图像。

那么什么关系在这里最好呢?

 class TourPackage(models.Model):
        name = models.CharField(max_length=255)
        package_start_date = models.DateTimeField()
        price = models.FloatField(default=0.0)
        facilities = models.TextField()


    class PackageGallery(models.Model):
        package = models.ForeignKey(TourPackage,on_delete=models.CASCADE)
        images = models.ImageField(upload_to='gallery')
BMWV8 回答:如何正确管理Django模型关系?

在我看来,创建ManyToOne关系是正确的,因为您可能希望能够将多个图像添加到一个TourPackage

一些注意事项:

  • PackageImagePackageGalleryItem比画廊更好(一个实例是单个图像,而不是画廊)。
  • images应该更改为image
  • 如果您将相关名称添加到package,则可以通过该名称查询TourPacakage的图像,例如package.images
  • 请确保您的缩进正确,因为目前class PackageGallery(models.Model):的缩进不正确,但这可能是过去的副本。

全部打包:

class TourPackage(models.Model):
        name = models.CharField(max_length=255)
        package_start_date = models.DateTimeField()
        price = models.FloatField(default=0.0)
        facilities = models.TextField()


class PackageImage(models.Model):
    package = models.ForeignKey(TourPackage,on_delete=models.CASCADE,related_name='images')
    image = models.ImageField(upload_to='gallery')
,
  

我还考虑过在这两个模型之间使用OneToOne关系,因为我们可以通过django表单一次上传多个图像。

这不会改变关系的基数。 ImageField仅存储有关一个图像文件的数据(应如此),编写视图和表单/表单集以允许多次上传仅意味着您将一次创建多个PackageGallery。这里没有魔术...

哦,是的:我完全同意Nico Griffioen关于命名的评论(包括模型和领域)。

,

我认为您应该使用多对一关系。因为每个包可以有多个图像。 一对一关系仅在包装有一张图像时才适用。

有关更多详细信息,请访问https://docs.djangoproject.com/en/2.2/topics/db/examples/many_to_one/

本文链接:https://www.f2er.com/3117895.html

大家都在问