Я использую 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})