2016-11-16 98 views
0

因此,我有一个表单,用户可以在其中发布“父”细节,也可以为不同模型的Kid形式。django中foreignkey字段的文本框

我需要的是:

  1. 在Kid_form我想允许用户键入“家庭场”,而不是下拉列表

  2. 允许用户添加一个父对象它不存在的情况。 (如果有可能是自动完成场将是巨大的)

  3. 允许所有用户子链接到任何其他用户的父对象

模型的.py

class Parent(models.Model): 
    title = models.CharField(max_length=250) 


class Kid(models.Model): 
    family = models.ForeignKey(Parent) 
    title = models.CharField(max_length=250) 
    age = models.CharField(max_length=250) 

views.py

def add_family(request): 
    if request.method == 'POST': 
     parent_form = ParentForm(request.POST) 
     kid_form = KidForm(request.POST) 
     if parent_form.is_valid() and kid_form.is_valid(): 
      parent = parent_form.save(commit=False) 
      parent.save() 
      kid = kid_form.save(commit=False) 
      kid.family = parent 
      kid.save() 
      return redirect('index') 
    else: 
     parent_form = ParentForm() 
     kid_form = KidForm() 
     template = 'add_family.html' 
     context = {'parent_form': parent_form, 'kid_form': kid_form} 
     return render(request, template, context) 

模板

<form method="post"> 
    {% csrf_token %} 
    {{ parent_form.title }} 
    {{ parent_form.address }} 
    <button type="submit">Send</button> 

<form method="post"> 
    {% csrf_token %} 
    {{ kid_form.family }} 
    {{ kid_form.title }} 
    {{ kid_form.age }} 
    <button type="submit">Send</button> 
</form> 

什么想法?

回答

0

看看Select2django-select2

这是一个带有(可选)多选和自动完成的输入小部件。要立即创建新条目,请查看django_select2.forms.Select2TagWidget及其子类。

您必须将django-select2网址添加到您的应用中才能自动完成工作,并按照文档中的说明在选择字段上调用django-select2插件。

安装在您的forms.py喜欢这个领域的M2M关系:

class MyForm(Form): 
    m2m_field = ModelMultipleChoiceField(
    widget=ModelSelect2MultipleWidget(model=RelatedModel, search_fields=['some_name__istartswith']), 
    queryset=RelatedModel.objects.all(), required=False) 

或ForeignKey的关系像你这样的:

class KidForm(Form): 
    family = ChoiceField(
    widget=ModelSelect2Widget(model=Parent, search_fields=['title__istartswith']), 
    queryset=Parent.objects.all(), required=False) 

urls.py

# use any url pattern to your liking 
url(r'^select2/', include('django_select2.urls')), 

在我的JS代码我正在初始化插件明确(没有为我工作的其他方式):

<script type="text/javascript" src="{% static 'django_select2/django_select2.js' %}"></script> 
$('select#id_family').djangoSelect2(); 

要集成到管理员,请参阅https://stackoverflow.com/a/38610206/621690

+0

这是一个很好的包。我只是不知道如何以简单的方式使用它!.. – DjangoGuy

相关问题