перебирая набор запросов и заменяя внешние ключи связанными объектами django rest framework - PullRequest
0 голосов
/ 05 мая 2018

У меня есть следующие модели:

class STUser(AbstractBaseUser):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=255)
    ...

class VenuePermissions(models.Model):
    user = models.ForeignKey(STUser, on_delete=models.CASCADE)
    venue = models.ForeignKey(Venue, on_delete=models.CASCADE, blank=True, null=True)
    ...

class Venue(models.Model):
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=1500, null=True, blank=True)
    ...

Затем я предварительно извлекаю связанные venuepermission объекты в STUser объект в представлении

class VenueUserList(APIView):
def get(self, request, *args, **kwargs):
  objects = STUser.objects.prefetch_related('venuepermissions_set').all()
   ...

Затем я хочу взять возвращенный набор запросов и заменить venue FK на их объекты.

 for item in objects:
        for permission in item_venuepermissions_set:
            permission_venue = Venue.objects.get(pk=permission_venue)
    print(repr(objects))
    ...
    return Response({})

но мой подход явно неверен. как правильно получить доступ к полю набора запросов и изменить его значение?

Как видите, мне нужно сделать это дважды. Один раз для доступа к текущим объектам license_set и еще раз для доступа к этому полю места разрешения_set и переопределить его.

Я не хочу ничего менять базу данных. Это просто для возврата значений.

обновление:

Я внес следующие изменения, чтобы получить доступ к отдельным полям:

for item in objects:
            for permission in item.venuepermissions_set:
                permission.venue = Venue.objects.get(pk=permission.venue)
        print(repr(objects))
        return Response({})

новая ошибка, которую я имею:

TypeError: 'RelatedManager' object is not iterable

пытается решить

1 Ответ

0 голосов
/ 05 мая 2018

Отвечая на все мои вопросы сегодня:

class VenueUserList(APIView):
    def get(self, request, *args, **kwargs):
        objects = STUser.objects.prefetch_related('venuepermissions_set').all()
        for item in objects:
            for permission in item.venuepermissions_set.all():
                permission.venue = Venue.objects.get(pk=permission.venue_id)
        return Response({})

это способ сделать это

...