Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

How correctly create tree with checkboxes? #11

Open
nurzhannogerbek opened this issue May 15, 2017 · 3 comments
Open

How correctly create tree with checkboxes? #11

nurzhannogerbek opened this issue May 15, 2017 · 3 comments

Comments

@nurzhannogerbek
Copy link

nurzhannogerbek commented May 15, 2017

Hello! I am intereted in your project. I want to know is it possible to create such widget as in the picture below with your app? I have form (ProgramForm) with ModelMultipleChoiceField (function field). I want to allow the user to choose functions by selecting of checkboxes. I dont understand how separate levels with your app. Lets say as queryset I send all Group objects. How app know where is there chields? In other words I need something as in tree_widget.html. Check it pls. Also I am tring to test your app and have next error.

default

models.py:

class Group(models.Model):
    name = models.CharField(_('Name'), max_length=250)

class Task(models.Model):
    name = models.CharField(_('Name'), max_length=250)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)

class Function(models.Model):
     name = models.CharField(_('Name'), max_length=250)
     task = models.ForeignKey(Task, on_delete=models.CASCADE)

class Program(models.Model):
    name = models.CharField(_('Name'), max_length=250)
    function = models.ManyToManyField("Function")

forms.py:

class ProgramForm(forms.ModelForm):
    function = forms.ModelMultipleChoiceField(queryset=Group.objects.none())

    class Meta:
        model = Program
        fields = ('function',)

    def __init__(self, all_groups, all_user_characteristics, *args, **kwargs):
        super(RequirementForm, self).__init__(*args, **kwargs)
        self.fields['function'].widget = FancyTreeWidget(queryset=all_group_tasks)  # I take all Group objects from view
        self.fields['function'].queryset = all_group_tasks

tree_widget.hml:

{% for group in groups %}
    <p>{{ group }}</p>
    {% for task in group.task_set.all %}
        <p>{{ task }}</p>
        {% for function in task.function_set.all %}
            <p>
               <input type="checkbox" name="option" value="{{ function }}">{{ function }}
            </p>
        {% endfor %}
    {% endfor %}
{% endfor %}

Error:

Traceback (most recent call last):
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\management\commands\runserver.py", line 113, in inner_run
    autoreload.raise_last_exception()
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\utils\autoreload.py", line 249, in raise_last_exception
    six.reraise(*_exception)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\utils\six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\utils\autoreload.py", line 226, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\__init__.py", line 27, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\apps\registry.py", line 115, in populate
    app_config.ready()
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\contrib\admin\apps.py", line 23, in ready
    self.module.autodiscover()
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\contrib\admin\__init__.py", line 26, in autodiscover
    autodiscover_modules('admin', register_to=site)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\utils\module_loading.py", line 50, in autodiscover_modules
    import_module('%s.%s' % (app_config.name, module_to_search))
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 986, in _gcd_import
  File "<frozen importlib._bootstrap>", line 969, in _find_and_load
  File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 673, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 665, in exec_module
  File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
  File "C:\Users\Nurzhan\PycharmProjects\RMS\project\admin.py", line 4, in <module>
    from .forms import MemberAdminForm
  File "C:\Users\Nurzhan\PycharmProjects\RMS\project\forms.py", line 5, in <module>
    from fancytree.widgets import FancyTreeWidget
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\fancytree\widgets.py", line 6, in <module>
    from django.utils.encoding import force_unicode
ImportError: cannot import name 'force_unicode'

Well It seems like Python 3 didnt support force_unicode. Is it possible to use your app in Python 3?

@xrmx
Copy link
Owner

xrmx commented May 31, 2017

Yeah, that would be easy to fix, which version of django is this?

@nurzhannogerbek
Copy link
Author

I use Django 1.10. Do you have any ideas?

@xrmx
Copy link
Owner

xrmx commented May 31, 2017

Yeah, if you read the django documentation it says that it's not available on python2 and has been superceded by force_text.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants