Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将django智能选择与modelform一起使用?_Django - Fatal编程技术网

如何将django智能选择与modelform一起使用?

如何将django智能选择与modelform一起使用?,django,Django,我用的是智能选择 编辑:这是我在模板中添加{{form.media.js}}后的代码,感谢@Evangelos models.py: from django.db import models from smart_selects.db_fields import ChainedForeignKey, ChainedManyToManyField class ChoixTangente(models.Model): name = models.CharField(max_length=2

我用的是智能选择

编辑:这是我在模板中添加{{form.media.js}}后的代码,感谢@Evangelos

models.py:

from django.db import models
from smart_selects.db_fields import ChainedForeignKey, ChainedManyToManyField

class ChoixTangente(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

class ChoixModele(models.Model):
    name = models.CharField(max_length=255)
    tangentes = models.ManyToManyField('Choixtangente', blank=True)

    def __str__(self):
        return self.name    

class TypeModele(models.Model):
    tangente = models.ForeignKey(ChoixTangente, blank=True, null=True)
    type_modele = ChainedForeignKey(
        ChoixModele,
        chained_field="tangente",
        chained_model_field="tangentes",
        show_all=False, 
        auto_choose=True,
        blank=True, null=True
    )

    def __unicode__(self):
        return str(self.pk)
form.py:

from django import forms
from .models import ChoixTangente, ChoixModele, TypeModele

class TypeModeleForm(forms.ModelForm):
    class Meta:
        model = TypeModele
        fields = ('tangente', 'type_modele')
views.py

from .models import ChoixTangente, ChoixModele, TypeModele
from .forms import TypeModeleForm

def type_modele_new(request):
    if request.method == "POST":
        form = TypeModeleForm(request.POST)
        if form.is_valid():

            modele_instance = form.save()

            return redirect('calculs.views.type_modele_detail', pk=modele_instance.pk)

    else: 
        form = TypeModeleForm()  

    return render(request, 'calculs/type_modele_new.html', {'form': form})

def type_modele_detail(request, pk):
    modele_instance = get_object_or_404(TypeModele, pk=pk)
    return render(request, 'calculs/type_modele_detail.html', {'modele_instance': modele_instance})
模板:键入_modele_new.html

{% load staticfiles %}

<form method="POST">
    {% csrf_token %}
    **{{ form.media.js }}**
    {{ form.as_p}}
    <input type="submit" value="Submit">
</form>  
{%load staticfiles%}
{%csrf_令牌%}
**{{form.media.js}**
{{form.as_p}}
url.py

from django.conf.urls import url, include
from . import views
from smart_selects import urls as smart_selects_urls

urlpatterns = [
    url(r'^chaining/', include('smart_selects.urls')), 
    url(r'^type_modele/new/$', views.type_modele_new, name='modele_new'),
    url(r'^type_modele/(?P<pk>[0-9]+)/$', views.type_modele_detail, name='modele_detail'),

]
从django.conf.url导入url,包括
从…起导入视图
从智能\u选择导入URL,如同智能\u选择\u URL一样
URL模式=[
url(r“^chaining/”,包括('smart\u selects.url'),
url(r“^type\u modele/new/$”,views.type\u modele\u new,name='modele\u new'),
url(r“^type\u modele/(?P[0-9]+)/$”,views.type\u modele\u detail,name='modele\u detail'),
]
编辑:问题是:

我有它在管理工作良好:

  • 我创建ChoixTangente实例
  • 我创建ChoixModele 实例,然后在列表中选择ChoixTangentes实例
  • 我可以通过在ChoixTangente列表中选择“切线”和在步骤1)和2)产生的相应ChoixModele选择列表中选择“type_modele”来创建TypeModele”实例
  • 我想让我的用户通过表单做同样的事情,但我不能让它工作

    字段“切线”由ChoixTangente列表填充,但当我选择一个值时,“type_modele”字段将保持为空,而不是显示相应选项的列表


    首先,你的观点在哪里

    试着用文件发布更完整的问题,以便更好地理解

    您在forms.py中引用的models.py中的模型装置在哪里

    您的字段应该在列表[]中

    您的forms.py应该如下所示:

    from django import forms
    
    from .models import Modele
    
    class AppareilForm(forms.ModelForm):
        class Meta:
            model = Modele
            fields =['tangente', 'modele']
    
    您不需要编写javascript

    只需记住在url.py中包含url(r“^chaining/”,include('smart_selects.url')

    在您的视图中,请调用AppareilForm在视图中阅读有关表单的详细信息

    在模板中,只需在加载javascript之前使用{form.as_p}和{{form.media.js}即可,并确保在模板中加载static。{%load static%}

    您的模板应该如下所示

    {% load static % }
    
    <form action="your url that points to your view" method="POST">
        {% csrf_token %}
        {{ form.media.js }}
        {{ form.as_p}}
        <input type="submit" value="Submit">
    </form>
    
    {%load static%}
    {%csrf_令牌%}
    {{form.media.js}
    {{form.as_p}}
    

    仔细阅读django selects描述。

    谢谢Evangelos。我已经将{form.media.js}添加到模板中,现在代码对我有效。我用有效代码编辑了我的帖子。(顺便说一下,Appareil Modele在我的帖子中是个错误,与此无关)