Переопределить generics.RetrieveAPIView вызывается с полем - PullRequest
0 голосов
/ 26 апреля 2020

Я использую generics.RetrieveAPIView в DRF, чтобы вернуть детали, используя поле поиска слагов. Я получаю слаг из URL www.../slug, а затем извлекаю необходимые данные из API: http://...api/slug/. Он отлично работает, когда пользователь вводит 'slug' в URL, однако, когда они входят в систему, они не вводят slug, поэтому я установил его с кодом.

В своем коде я установил slug на anonymous. На этом этапе я использую пользователя в request для получения сведений, но он не работает.

Пожалуйста, помогите. Вот мой общий вид:

class StoreDetail(generics.RetrieveAPIView):
    lookup_field =  'slug'
    serializer_class = StoreSerializer

    def get_queryset(self):
        if self.kwargs:
            slug = self.kwargs['slug']
            if slug != 'anonymous': # means slug is in URL
                return Store.objects.filter(slug=slug)
            else:
                # manually get slug from db
                id = self.request.user.id
                store = Store.objects.get(account=id)
                slug = store.slug
                # Everything up to here works however it returns 404(Not found)
                return Store.objects.filter(slug=slug)

Редактировать: Вот модель магазина:

class Store(models.Model):
    account = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    store_name = models.CharField(max_length=30, unique=True, null=True)
    slug = models.SlugField(unique=True, null=True)
    logo = models.ImageField(upload_to='images', blank=True) 
    address = models.CharField(max_length=100, blank=True)
    verified = models.BooleanField(default=False)
    created = models.DateTimeField(verbose_name='date joined', auto_now_add=True, null=True)

    def __str__(self):
        return self.store_name

    def get_absolute_url(self):
        return reverse('store_detail', kwargs={'slug': self.slug})
...