繁体   English   中英

Django 使用数据库的带有下拉列表的表单返回空字段

[英]Django form with dropdown list using Database returns empty fields

我正在发现 Django 并且正在尝试开发一个简单的应用程序。

我的数据库中有三个表:一个大表向用户报告所有信息,两个表在我的表单上创建下拉列表(但没有故意使用外键)。 我需要有这两个表,因为状态和区域需要始终是可编辑的,并且每次都需要在主表 Action 中以相同的方式写入。

这是我的model.py

class Status(models.Model):
    id_status = models.AutoField(db_column='ID_STATUS', primary_key=True)
    status = models.CharField(db_column='STATUS', max_length=50)

    def __str__(self):
        return self.status

    class Meta:
        managed = False
        db_table = 'T_EAVP_STATUS'


class Area(models.Model):
    id_area = models.AutoField(db_column='ID_AREA', primary_key=True)
    area_name = models.CharField(db_column='AREA_NAME', max_length=50)

    def __str__(self):
        return self.area_name

    class Meta:
        managed = False
        db_table = 'T_EAVP_AREA'


class Action(models.Model):
    id = models.AutoField(db_column='ID', primary_key=True)
    title = models.CharField(db_column='TITLE', max_length=200)
    due_date = models.DateTimeField(db_column='DUE_DATE')
    status = models.CharField(db_column='STATUS', max_length=50)
    date_insert = models.DateTimeField(db_column='DATE_INSERT', auto_now_add=True)
    emitting_area = models.CharField(db_column='EMITTING_AREA', max_length=50)
    receiving_area = models.CharField(db_column='RECEIVING_AREA', max_length=50)
    owner = models.CharField(db_column='OWNER', max_length=200)

    def __str__(self):
        return self.title

    class Meta:
        managed = False
        db_table = 'T_EAVP_ACTION'

这是我的forms.py

class ActionForm(forms.ModelForm):
    status = forms.ModelChoiceField(queryset=Status.objects.all())
    receiving_area = forms.ModelChoiceField(queryset=Area.objects.all())
    emitting_area = forms.ModelChoiceField(queryset=Area.objects.all())

    class Meta:
        model = Action
        fields = ['title', 'due_date', 'owner']

这是我的views.py

@csrf_exempt
@xframe_options_exempt
def action_add(request):
    if request.method == 'POST':
        form = ActionForm(request.POST)
        if form.is_valid():
            action = form.save()
            return redirect('action-list')
    else:
        form = ActionForm()
    return render(request, 'polls/action_add.html', {'form': form})

这是我的 HTML 代码:

{% extends 'polls/base.html' %}

{% block title %}{{ action.title }}{% endblock %}


{% block content %}
<h1>Ajouter une action</h1>

<form action="" method="post" class="form" novalidation>
  {% csrf_token %}
  {{ form }}
    <br><br>
    <input type="submit" class="submit" value="Créer">
</form>

{% endblock %}

我很确定我已经从 Django 导入了所有需要的库。

问题:当我运行我的代码并尝试使用我的 ActionForm 创建一个新动作时,它无法正常工作。 在Action表中,下拉列表填写的字段对应的字段是完全空的。

表状态和表区域包含值,因此问题不在于此。

我尝试了很多不同的方法,但似乎没有任何效果,并且在保存表单后我的数据库中的字段总是空的。

如果有人看到解决方案,我很感兴趣!

解决方案是在form.py中添加字段的名称:

class ActionForm(forms.ModelForm):  # Crée un formulaire se basant sur Action
    status = forms.ModelChoiceField(queryset=Status.objects.all())
    receiving_area = forms.ModelChoiceField(queryset=Area.objects.all())
    emitting_area = forms.ModelChoiceField(queryset=Area.objects.all())

    class Meta:
        model = Action
        fields = ['title', 'due_date', 'owner', 'status', 'receiving_area', 'emitting_area']

谢谢威廉·范·昂塞姆!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM