Django получить доступ к полю ForeignKey и получить их значения - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь создать небольшую платформу интернет-магазина, где пользователь может создать магазин, выбрать категорию товаров и добавить товары к нему.

Чтобы достичь своей цели, я создал этот упрощенный models.py

class Organization(models.Model):
    org_id = models.AutoField(primary_key=True)
    company_name = models.CharField(max_length=255)
    owned_by = models.OneToOneField(UserProfile, on_delete=models.CASCADE)

    def __str__(self):
        return f'{self.company_name} ORG'

    def get_absolute_url(self):
        return reverse('org-view', kwargs={'pk': self.org_id})

class Category(models.Model):
    CATEGORIES = ( ('electric', 'Electronics'), ('food', 'FrozenFood'), ('shoes', 'slippers') )
    cat_name = models.CharField(max_length=255, choices=CATEGORIES)
    def __str__(self):
        return f'{self.cat_name} Category'

    def get_absolute_url(self):
        return reverse('cat-view', kwargs={'id': self.pk})

class Product(models.Model):
    org_id = models.ForeignKey(Organization, on_delete=models.CASCADE, blank=True, null=True)
    cat_name = models.ForeignKey(Category, on_delete=models.CASCADE)
    product_name = models.CharField(max_length=255)

    def __str__(self):
        return self.product_name

На мой взгляд, я хочу сохранить пользователя на одной странице, где он сможет управлять своим магазином.

Мои текущие views.py:

class OrganizationDetailView(LoginRequiredMixin, UserPassesTestMixin, DetailView, FormMixin):
    model = Organization
    queryset = Organization.objects.all()
    template_name = 'org/org_view.html'
    form_class = ProductForm


    def test_func(self):
        org = self.get_object()
        if self.request.user.profile == org.owned_by:
            return True
        return False

    def get(self, request, *args, **kwargs):
        self.object = self.get_object()
        context = self.get_context_data()
        pk = self.object.serializable_value('pk')
        product = Product.objects.filter(org_id=pk)
        return self.render_to_response(context)

I нужна помощь, чтобы понять несколько вещей:

  1. как выполнить запросы, чтобы получить все его продукты и увидеть категорию, к которой принадлежит продукт.

Мое плохое решение: переменная product содержит все товары для этого магазина, включая cat_name_id, который указывает на категорию pk. Это хорошо, но мне нужно название категории. мне нужно что-то вроде этого: print (product.category_name), и я должен увидеть «Электроника»

как выполнить запрос, который группирует элементы в одной категории.

Я уже потратил несколько дней, пытаясь понять эти запросы, поэтому, пожалуйста, объясните, как мне пять

1 Ответ

0 голосов
/ 04 апреля 2020

Вы можете отфильтровать все продукты одного пользователя с помощью следующей команды:

products = Product.objects.all().filter(org_id__owned_by=user)

См. Документацию: https://docs.djangoproject.com/en/3.0/topics/db/queries/#retrieving -specifi c -objects-with-filters . Здесь 'user' - это пользовательский объект из вашего класса User_Profile.

Что касается вашего второго вопроса, я предполагаю, что вы хотите заказать определенный c запрос по категории; в этом случае утверждение будет:

products = Product.objects.order_by('cat_name')

Или вы можете объединить их с:

products = Product.objects.all().filter(org_id__owned_by=user).order_by('cat_name')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...