0

我有 3 个这样的课程:

class Person (models.Model)
   name = models.CharField(max_length=200)

class Device (models.Model)
   mobile = models.CharField(max_length=200)

class Uses (models.Model)
   ....
 person_name =  models.ForeignKey(Person)
 person_device = models.ForeignKey(Device)

我的问题是:如何查询以获取“姓名”人使用的设备?这需要通过使用类。

4

3 回答 3

1

如果您使用 ManyToManyField,生活会更轻松,即将此字段添加到 Person 模型:

devices = models.ManyToManyField('Device', through='Uses')

然后,要获取列表,您只需要获取模型对象的设备属性:

Person.objects.get(name="TheNameYouWant").devices

如果您不想修改模型,可以检索到一个人使用的设备列表,如下所示:

Device.objects.filter(uses__person_name__name="TheNameYouWant")

如果 Django 说无法将关键字“uses”解析为字段,请更改为“uses_set”。我不记得哪个是哪个。

于 2013-07-24T17:21:51.707 回答
0

这假设你所写的是你的类中唯一的东西,即你的整个models.py文件。

所以,现在您想知道如何将这些表链接在一起。答案很简单,您所要做的就是使用 django 提供的众多关系文件之一来创建表之间的关系。

现在关系可能会有所不同,这两个表之间的关系如何工作也可能很重要。Django 使这一切成为可能,请查看此处的文档。第一个需要建立那种关系,所以说aPerson可以有很多Devices。所以,这就是你的新Person班级的样子:

class Person (models.Model)
   name = models.CharField(max_length=200)

这就是你的Device班级的样子:

class Device (models.Model)
   mobile = models.CharField(max_length=200)
   user = model.ForeignKey(Person)

请注意,您不会更改Person类,这就是Many-To-One关系在 django 中的工作方式。您可以在我上面提供的文档链接中查看这一切是如何工作的。

现在对于查询,您可以简单地执行以下操作:

Device.objects.filter(user__name='<name_you_want>')
于 2013-07-23T16:26:29.307 回答
0

如何查询以获取“姓名”人使用的设备?

devices = Uses.objects.filter(person_name__name='name').values_list('person_device')
于 2013-07-24T08:30:52.993 回答