Как вы перечисляете на одной странице все учетные записи, на которые подписан пользователь, с соответствующими элементами под ними? - PullRequest
0 голосов
/ 02 августа 2020

all - мне нужна страница просмотра списка, на которой отображаются все учетные записи продавцов, за которыми следит пользователь, и под каждым из этих имен продавцов их список названий продуктов, например:

User = user1

Далее:

  1. Продавец 1
  • Предметы: Item1, Item2, Item3
Продавец 2
  • Предметы: Item4, Item5, Item6

Я могу вытащить товары для любого конкретного продавца, если они одни в страницу (например, подробный просмотр / список поставщиков), но я не могу понять logi c для одновременного отображения всех пользователей и подключения продуктов под ними.

ДЕЙСТВИТЕЛЬНО ценю помощь здесь!

Модель пользователя:

class CustomUser(AbstractUser):
email       = models.EmailField(max_length=255, unique=True)
is_active   = models.BooleanField(default=True)
signup_timestamp   = models.DateTimeField(default=now, editable=False)
objects     = CustomUserManager()

def __str__(self):
    return self.username

Модель продавца:

class SellerAccount(models.Model):
user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
active = models.BooleanField(default=True)
username = CustomUser.username
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)

def __str__(self):
    return str(self.user)

def get_absolute_url(self):
    return reverse("artist_detail", kwargs={"artist_name": self.user.username})

Продавцы, за которыми подписан конкретный пользователь:

class WatchedArtist(models.Model):
user        = models.ForeignKey(CustomUser, null=False, on_delete=models.CASCADE)
seller      = models.ForeignKey(SellerAccount, null=False, on_delete=models.CASCADE)
watched     = models.BooleanField(default=True)
timestamp   = models.DateTimeField(default=now, editable=False, blank=True, null=True)

Товары продавцов:

class Product(models.Model):
seller      = models.ForeignKey(SellerAccount, null=False, on_delete=models.CASCADE)
title       = models.CharField(max_length=30, blank=False)
slug        = models.SlugField(unique=True, blank=True)


def __str__(self):
    return self.title

def get_absolute_url(self):
    view_name = "products:detail"
    return reverse(view_name, kwargs={"slug": self.slug})

1 Ответ

0 голосов
/ 02 августа 2020

пользователь подписан на sellerAccount по модели "WatchedArtist", в "WatchedArtist" artiste у вас есть SellerAccount, а у SellerAccount много товаров, поэтому:

                                                       | <-- product n1
        | -> WatchedArtist n1 --> SellerAccount n3 <---| <-- product n2
        |                                              | <-- product n3
        |                                              | <-- ect...
user -->|
        |                                              | <-- product n42
        | -> WatchedArtist n2 --> SellerAccount n15 <--| <-- product n43
        |                                              | <-- product n44
        |                                              | <-- ect...
        | --> ect ...

в коде:

user = User.objects.get(username="my_username")

for watched in user.watchedartists.all():  # you have all followed seller by user

    print(watched.seller) # here you print the __str__ methods of SellerAccount

    for product in watched.seller.products.all():  # you have all product of seller
        print(product)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...