Предполагая модель:
class User(models.Model):
name = models.CharField(max_length=32)
favorite = models.ForeignKey(Item)
class Item(models.Model):
name = models.CharField(max_length=32)
Эквивалентный Django будет:
usersFavorites = User.objects.all().values_list("name", "favorite__name")
Это не использует точные имена полей, которые вы дали.Для этого вам просто нужно добавить соответствующие поля db_table
и db_column
в модели.
PS Эта конкретная схема не особенно хороша.ИМХО, User
и Item
должны иметь отношение «многие ко многим»:
class User(models.Model):
name = models.CharField(max_length=32)
favorites = models.ManyToManyField(Item, related_name="users")
class Item(models.Model):
name = models.CharField(max_length=32)
, если элемент не может иметь только одного пользователя, в этом случае ForeignKey
должно быть в Item
.
Затем вы можете выполнить итерацию в двойном цикле:
for user in User.objects.all().select_related("favorites"):
for favorite in user.favorites:
# use `user` and `favorite` in some way.
Из-за вызова select_related()
запрос выполняется одним махом в первом цикле for
.