【发布时间】:2018-04-17 00:12:54
【问题描述】:
我使用基于类的通用视图和 forms.ModelForm 作为form_class 属性。您如何根据表单的下拉值在 ModelForm 中显示链接?
我将这个最小的、可重现的示例上传到 GitHub HERE。
git clone https://github.com/jaradc/SO939393.git
我正在尝试实现 stront>:选择从下拉列表的项目时,在选择后立即显示到下拉下拉下拉下降下方的文件。
视觉上:
- 根据请求加载表单
- 用户从“Model one”下拉菜单中选择一个项目
- 一些内部进程:
- 获取 ModelOne
sample_input_file位置 - 将该位置作为链接注入到“Model one”字段下方的表单中
- 获取 ModelOne
快速查看(这是整个项目)
如果这太过分了,你可以忽略它!如果有人想查看每个细节,我会提供完整的上下文。
项目名称:SO939393
应用名称:myapp
SO939393/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('myapp.urls'))
]
SO939393/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
...
'myapp.apps.MyappConfig',
]
myapp/models.py
from django.db import models
class ModelOne(models.Model):
name = models.CharField(max_length=100)
large_pickle_file = models.FileField()
sample_input_file = models.FileField()
def __str__(self):
return self.name
class ModelTwo(models.Model):
name = models.CharField(max_length=100)
model_one = models.ForeignKey(ModelOne, on_delete=models.CASCADE)
upload_file = models.FileField()
def __str__(self):
return self.name
myapp/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.HomeView.as_view(), name='home'),
path('create/', views.Create.as_view(), name='create')
]
myapp/forms.py
from django import forms
from .models import ModelTwo
class ModelTwoForm(forms.ModelForm):
class Meta:
model = ModelTwo
fields = ['name', 'model_one', 'upload_file']
myapp/views.py
from django.shortcuts import render
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.views.generic.list import ListView
from .forms import ModelTwoForm
from .models import ModelTwo
class HomeView(ListView):
model = ModelTwo
template_name = 'myapp/base.html'
class Create(CreateView):
form_class = ModelTwoForm
model = ModelTwo
template_name = 'myapp/create_form.html'
success_url = '/'
myapp/templates/myapp/base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% block content %}
<h1><a href="{% url 'create' %}">Create</a> an Item</h1>
<ul>
{% for item in object_list %}
<li>{{ item.name }} - {{ item.model_one.name }}</li>
{% empty %}
<li>No items yet.</li>
{% endfor %}
</ul>
{% endblock %}
{% block custom_js %}{% endblock %}
</body>
</html>
myapp/templates/myapp/create_form.html
{% load static %}
{% block content %}
<div class="container col-5">
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save" />
</form>
</div>
{% endblock %}
{% block custom_js %}<script>{% static 'myapp/custom.js' %}</script>{% endblock %}
myapp/admin.py
from django.contrib import admin
from .models import ModelOne, ModelTwo
admin.site.register(ModelOne)
admin.site.register(ModelTwo)
myapp/static/myapp/custom.js
# this file is empty but mentioning just in-case javascript is the way to go here
【问题讨论】:
标签: javascript python jquery django django-forms