Как реализовать Django Chained Drop Down с помощью умного выбора - PullRequest
0 голосов
/ 06 апреля 2020

Я использую небольшой проект django и использую django -clever-select для создания цепочки выпадающего выбора.

Я следовал точным инструкциям, приведенным в руководстве по их установке на https://pypi.org/project/django-clever-selects/.

Но как только я запускаю приложение в pycharm, раскрывающийся список не показывает какие-либо данные для выбора.

models.py

<code><pre>
class Category(models.Model):
    mname = models.CharField(max_length=100, blank=False,unique=True)
    mdescription = models.CharField(max_length=255, blank=True)

    def __str__(self):
        return self.mname

    class Meta:
        ordering = ('mname',)

class SubCategory(models.Model):

    category = models.ForeignKey(Category, on_delete=models.CASCADE,null=True, blank=True)
    scname = models.CharField (max_length=100, blank=False,unique=True)
    scdecription = models.CharField(max_length=255, blank=True)

    def __str__(self):
        return self.scname

    class Meta:
        ordering = ('scname',)

class Deals(models.Model):

    vendor_deal = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
    subcategory = models.ForeignKey(SubCategory, on_delete=models.SET_NULL, null= True)
    description = models.CharField(max_length=255, blank=True)
    document = models.FileField(upload_to='documents/')
    uploaded_at = models.DateField(auto_now_add=True)
    expire_date = models.DateField(null=False)
    current_date = models.DateField(auto_now_add=True)

    def __str__(self):
        return self.description

    class Meta:

        ordering = ('description',)
 
шаблон файл для формы
    {% extends 'base.html' %}
    {% load static %}
    {% block content %}
    
    
        
        
        
             
                {% csrf_token %}
                
                 {{ form.as_p }}
                
                
             
        
            
        
         
         


    
    {% endblock %} 
`файл form.py`
from django import forms
from clever_selects.forms import ChainedModelChoiceField
from django.urls import reverse_lazy

from uploads.core.models import Deals, Category, SubCategory


class DocumentForm(forms.ModelForm):


    category = forms.ModelChoiceField(widget=forms.Select(attrs={'class':'form-control'}),queryset=Category.objects.all())

    subcategory = ChainedModelChoiceField(parent_field='category', ajax_url=reverse_lazy('ajax_chained_models'),
        empty_label=(u'Select Sub Category'), model=SubCategory, required=True, widget=forms.Select(attrs={'class':'form-control'}))

    description = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))

    document = forms.FileField(widget=forms.FileInput(attrs={'class': 'form-control-file'}))

    # Call attrs with form widget
    expire_date = forms.DateField(widget=forms.widgets.DateInput(attrs={'class':'datepicker','id':'date','type': 'date'}))


    class Meta:
        model = Deals
        fields = ('category', 'subcategory', 'description', 'document', 'expire_date')
файл view.py
class AjaxChainedView(ChainedSelectChoicesView):
    def get_child_set(self):
        return SubCategory.object.filter(catego=self.parent_value)
`файл url.py`

    from django.conf.urls import url, include
    from rest_framework import routers
    from .views import home, model_form_upload, DealViewSet, AjaxChainedView

    app_name = "core"

    router = routers.DefaultRouter()
    router.register(r'deals_list', DealViewSet)

    urlpatterns = [

        url(r'^$',home, name='home'),
       # url(r'^uploads/simple/$', views.simple_upload, name='simple_upload'),
        url(r'^form/$', model_form_upload, name='model_form_upload'),
        url(r'^', include(router.urls)),
        url(r'^ajax/custom-chained-view-url/$', AjaxChainedView.as_view(), name='ajax_chained_view'),
    ]
    
`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...