Django forms.ChoiceField для динамического создания на основе - PullRequest
0 голосов
/ 03 апреля 2020

Я создаю веб-сайт с django, где пользователь может создать магазин> выбрать не более одного из каждой категории> выбрать несколько продуктов для каждой категории; в этом порядке

у меня есть DetailView, который позволяет им видеть детали магазина и создавать категорию под ним. Я использую FormMixin, чтобы позволить им создать категорию, и ChoiceField для типа категории.

Что я хочу: пусть они выбирают только из категорий, которые они не выбирали в прошлом, например: у меня есть 3 Категории: Изделия из дерева, Продукты питания, Инструменты; если они уже добавили категорию «Инструменты» в свой магазин, они смогут выбрать ее снова (я хочу, чтобы форма вообще не отображала ее)

Мои просмотры:

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


    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):
        # getting the post to display
        self.object = self.get_object()
        context = self.get_context_data()

        categories = Category.objects.filter(org=self.object).values_list('cat_name')
        context['categories'] = []
        for category in categories:
            context['categories'].append(*category)

        return self.render_to_response(context)

    def post(self, request, *args, **kwargs):
        pk = self.get_object().serializable_value('pk')
        org_id = Organization.objects.get(org_id=pk)
        cat_name = self.request.POST.get('cat_name')
        new_category = Category.objects.create(org=org_id, cat_name=cat_name)

        return self.get(request)

My forms.py:

class CategoryForm(forms.ModelForm):
    CATEGORIES = ( ('WOOD', 'WoodWorks'), ('FOOD', 'Food'), ('TOOLS', 'Tools') )
    cat_name = forms.ChoiceField(choices=CATEGORIES)

    class Meta:
        model = Category
        fields = [ 'cat_name' ]

Не уверен, что здесь уместен файл models.py.

Добавлен models.py для категории

class Category(models.Model):
    CATEGORIES = ( ('WOOD', 'WoodWorks'), ('FOOD', 'Food'), ('TOOLS', 'Tools') )
    org = models.ForeignKey(Organization, on_delete=models.CASCADE)
    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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...