首页 > 解决方案 > 使用 ModelChoiceField 时的 Django 空列表

问题描述

首先,我通常是 Django 或 MVC 框架的新手,而且我在 Python 方面的经验很少。

我读过类似标题的stackoverflow线程,但我错过了一些拼图。

在尝试了一段时间后,这就是我最终得到的......它呈现空列表。我认为这是因为引用的表没有数据库条目。我似乎无法弄清楚如何根据另一个表中的 FK 评估值:

模型.py

class Employees(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

  def __str__(self):
      return self.last_name

  def get_absolute_url(self):
      return reverse('employees')

class Tasks(models.Model):
    type = models.CharField(max_length=30)
    duration = models.IntegerField()

    def __str__(self):
        return self.type

    def get_absolute_url(self):
        return reverse('tasks')

class Records(models.Model):
    employee_id = models.ForeignKey(Employees)
    task_id = models.ForeignKey(Tasks)
    date_from = models.DateTimeField()
    date_to = models.DateTimeField()

    def __str__(self):
        return self.id

    def get_absolute_url(self):
        return reverse('records')

表格.py

class CreateRecordForm(forms.ModelForm):
    employee_id = forms.ModelChoiceField(queryset=Records.objects.all().values('employee_id'))
    task_id = forms.ModelChoiceField(queryset=Records.objects.all().values('task_id'))
    date_from = forms.DateTimeField() #doesnt matter at the moment
    class Meta:
        model = Records
        fields = ('employee_id', 'task_id', 'date_from')

视图.py

class RecordCreateView(CreateView):
    form_class = CreateRecordForm
    template_name = 'record_new.html'
    model = Records
    #fields = ['employee_id', 'task_id', 'date_from']

下面的通用视图正确呈现下拉选择,因此它是可行的。

class RecordCreateView(CreateView):
    template_name = 'record_new.html'
    model = Records
    fields = ['employee_id', 'task_id', 'date_from']

record_new.html

{% extends 'base.html' %}

{% block content %}
<h1>New record</h1>
<form action="" method="post">{% csrf_token %}
  {{ form }}
<button class="btn btn-success ml-2" type="submit">save</button>
</form>
{% endblock content %}

任何帮助是极大的赞赏!

标签: djangodjango-modelsdjango-formsdjango-3

解决方案


推荐阅读