【问题标题】:Form control in Django ForeignKeyDjango ForeignKey 中的表单控件
【发布时间】:2017-09-14 15:46:58
【问题描述】:

我的模特:

class Faculty(models.Model):
    name = models.CharField(max_length=30)


class Program(models.Model):
    name = models.CharField(max_length=30)
    faculty = models.ForeignKey(Faculty)


class Student(models.Model):
    name = models.CharField(max_length=30)
    faculty = models.ForeignKey(Faculty)
    program = models.ForeignKey(Program)

让我有两个教员:

  • 科学
  • 管理

我每个都有 3 个程序:

  • 科学
    • 乙。电脑
    • 乙。软件
    • 乙。民用
  • 管理
    • 工商管理硕士
    • 论坛
    • BBI

我想要的是当学生填写表格时,他们可以选择教师和课程。因此,当用户选择科学作为教师时。那么如何使 django 只提供所选教师的程序?这意味着当用户在 Faculty Field 中选择 Science 时,在 program 领域 Computer、Software 和 Civil 应该显示。

有可能吗?那怎么办?我想我提出了一个明确的问题。 (很容易理解我的意思)

更新:-@thameem 提出的问题

forms.py

class StudentForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = {'name','faculty','program','roll','gender','contact','address','about',}

模板:

<div class="contener">
<form method="post" enctype="multipart/form-data">{% csrf_token %}
            {{form.as_p}}

            <input type="submit" value="Save">
</form>
</div>

urls.py

urlpatterns = [
url(r'^addprofile/$', addprofile, name='addprofile'),
]

【问题讨论】:

  • 开始赏金,这将是一个漫长而直接的答案。
  • 我真的不明白你的真正意思。所以按照你的说法,现在是不可能的?
  • 可以做,但没有人会免费做,因为你的问题评价不高,也没有赏金。
  • 如果我有那个特权或所谓的,我一定会这样做的。我非常需要那个解决方案,为此我可能需要回答一些未回答的问题。 (只需在网上搜索解决方案)。会赢得一些声誉,并会为此付出赏金。
  • 显示您的 forms.py 和 html 模板以及 urls.py

标签: python django forms foreign-keys foreign-key-relationship


【解决方案1】:

你可以使用 ajax 来完成

将此代码放入您的模板中

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script>

    $(document).ready(function(){

        $("select[name='faculty']").change(function(){
            var value =  $(this).val();
            var pselect = $("select[name='program']");

            $.ajax({
                method:"get",
                dataType:"json",
                url:'{% url 'profile:suggest_program' %}',
                data:{
                'faculty':value
                },
                success:function(data){
                    pselect.empty();
                    $.each(data, function(index, value){
                        pselect.append("<option value='"+value.pk+"'>"+value.name+"</option>");
                    });
                },

            });
        });

    });
    </script>

在你的views.py中

from django.http import JsonResponse


def suggest_program(request):
    faculty = request.GET.get("faculty")
    programs = [{"data":"nothing found"}]
    if faculty:
        programs = Program.objects.filter(faculty_id=faculty
                                            ).values("pk", "name")
        programs = list(programs)
    return JsonResponse(programs, safe=False)

urls.py

url(r'^suggest-program/$', views.suggest_program, name="suggest_program"),

【讨论】:

  • 从 url /suggest-program/ [{"data": "nothing found"}]得到这个
  • 在 url 中尝试这样的 ..suggest-program/?faculty=1
  • 你知道jqyery。你把那个代码放在你的html中了吗
  • 我暂时不知道。现在将通过它以使其正常工作。
  • 把这个改成你的实际路径 '{% url 'profile:suggest_program' %}', to '/suggest-program/',
猜你喜欢
  • 2015-10-06
  • 2019-04-30
  • 2013-02-14
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 2017-12-29
相关资源
最近更新 更多