过滤继承的django模型的最佳解决方案

时间:2013-07-30 22:51:04

标签: django django-models

我有一个通用的场景,但我把它具体化,以便于回答。

我有模型Image,其中包含name,url,camera,format,created_date,uploaded_date等字段。 (这些是EXIF信息。会更喜欢这些作为标签的多个字段,但我担心它会变得太复杂。)

我有另一个模型File,它有一个foreignkey Image字段和一个foreignkey用户字段。 (如果两个不同的用户具有相同的图像,则会有一个Image对象和两个用于指向该图像的用户的File对象。)

现在我需要完成两项任务。 1-找到用户拥有的所有不同摄像机。 (或格式等)2-通过特定摄像机过滤所有用户文件。

我无法弄清楚这种情况下更有效的艺术构造。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您的文件模型实际上是一个多对多的自定义关系。我会将Image模型中的ManyToMany用于用户模型。

class Image(models.Model):
   ...
   users = models.ManyToManyField(...)

查询它会是这样的:

a)找到用户拥有的摄像头

Image.objects.values('camera').filter(users=the_user_in_subject).distinct()

b)通过相机过滤用户图像

Image.objects.filter(users=the_user_in_subject, camera='camera type')

此外,如果您的文件模型还包含其他字段,则可以使用through选项https://docs.djangoproject.com/en/dev/topics/db/models/#extra-fields-on-many-to-many-relationships