【问题标题】:textbox for foreignkey field in djangodjango中外键字段的文本框
【发布时间】:2017-03-30 20:35:11
【问题描述】:

所以我有一个表单,用户可以在其中发布“父母”详细信息,也可以为不同型号的孩子发布表单。

我需要的是:

  1. 在 Kid_form 中,我希望允许用户键入“家庭字段”而不是下拉列表

  2. 允许用户添加父对象以防万一它不存在。 (如果有可能是自动完成字段会很棒)

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

models.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>

有什么想法吗?

【问题讨论】:

    标签: django forms foreign-keys


    【解决方案1】:

    看看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

    【讨论】:

    • 这是一个很棒的包。我只是不知道如何简单地使用它!..
    猜你喜欢
    • 2020-10-20
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2017-02-03
    • 2011-11-16
    • 2019-06-29
    • 2014-08-24
    • 2017-11-02
    相关资源
    最近更新 更多