使用 ModelChoiceField 时的 Django 空列表

问题描述

首先,我一般不熟悉 Django 或 MVC 框架,而且我对 Python 的经验很少。

我已经阅读了具有类似标题的 stackoverflow 线程,但我还是遗漏了一些拼图。

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

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

forms.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')

views.py

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

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

class RecordCreateView(CreateView):
    template_name = 'record_new.html'
    model = Records
    fields = ['employee_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 %}

非常感谢任何帮助!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)