Django ModelForm 不显示所有字段



我正在尝试使用Django ModelForms构建链接到PostgreSQL数据库的表单。该模板正在渲染其中两个字段(具有 ManyToMany 关系的字段(,但它只给了我一个空白的"标题"框。

这是我 forms.py:

Forms.py:

class ProgramForm(forms.ModelForm):
class Meta:
    model = Program
    fields = ['function','task', 'title']
widgets = {
    'function' : forms.Select,
    'task' : forms.Select,
    'title' : forms.Select,
    }

这是我 Models.py:

class Program(models.Model):
    title = models.CharField(max_length=255)
    function = models.ManyToManyField(function, related_name='programs')
    task = models.ManyToManyField(Task, related_name='programs')
    def __unicode__(self):
        return self.title
class Task(models.Model):
    tasknum = models.CharField(max_length=20)
    taskname = models.CharField(max_length=100)
    task_num_name = models.CharField(max_length=100)
    function = models.ForeignKey(Function, related_name="tasks")
    def __unicode__(self):
        return self.task_num_name
class Function(models.Model):
    function = models.CharField(max_length=50)
    function_abrev = models.CharField(max_length = 25)
    def __unicode__(self):
        return self.function

Views.py:

def main(request):
    return render (request, 'assignments/main.html')
def add_program(request):
    form = ProgramForm()
    return render (request, 'assignments/ad_form.html', {"form":form})
def link(request):
    if request.method == 'POST':
        form = ProgramForm(request.POST)
        if form.is_valid():
        return HttpResponse("we maybe getting somewhere") 
    else: 
        return HttpResponse("keep working")

我需要做几件事:

  1. 我需要将"标题"作为向下滚动在 html 页面中呈现(与"函数"和"任务"的出现方式相同。

  2. 我需要能够保存关系。模型填充了除关系之外的所有所需信息。目标是让员工能够选择一个"功能",让该选择充当"任务"向下滚动的过滤器(功能和任务有一个 OneToMany(,然后允许他们选择他们想要添加到他们的投资组合中的任何程序。

任何帮助将不胜感激。

1. 表单中的标题字段

为此,我不太明白标题字段如何像函数和任务一样向下滚动。函数和任务是下拉列表,因为它们是链接到其他模型的多对多字段,这意味着用户必须选择要链接函数模型和任务模型中的其他对象。另一方面,标题字段只是一个 CharField,因此没有定义的内容集供用户选择。要允许用户输入程序的标题,您应该将标题的小部件更改为 Textarea((,如下所示:

forms.py

from django.forms import ModelForm, Textarea
class ProgramForm(forms.ModelForm):
    class Meta:
        model = Program
        fields = ['function','task', 'title']
    widgets = {
        'function' : forms.Select,
        'task' : forms.Select,
        'title' : Textarea(),
    }

2. 从表单中保存程序

要保存用户在工作人员上创建的程序,只需将form.save((添加到您的链接(请求(函数中:

views.py

def link(request):
    if request.method == 'POST':
        form = ProgramForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponse("we maybe getting somewhere") 
        else: 
            return HttpResponse("keep working")

希望这有帮助!

我能够从 views.py 进行查询并将if传递给模板。

Views.py 
def function_page(request, Function_id):
assignments = Function.objects.get(id=Function_id)
programs = assignments.programs.all()
context = {
   'assignments': assignments,
   'programs' : programs
}
return render (request, 'function.html', context)

.HTML

 {% for program in programs %}
      <option value="{{program.title}}">{{program.title}}</option>
      {% endfor %}

最新更新