2016-11-16 46 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

相關問題