无法以 Django 形式获取初始值作为 modelchoicefield

Can't get initial value as modelchoicefield in django form

我有一个列列表。我正在尝试更新该列表中的一行。在我 select 一行之后,我正在尝试更新它。在我 select 一行之后,我得到其中一个参数 table_id。 table_id 在 model.py 和 forms.py 中定义。我在 djangoproject 中将 table_id 显示为 modelchoicefield,但我无法将我的实例值启动为 modelchoicefield。

updateView.py

from django.shortcuts import render,redirect,get_object_or_404
from django.urls import reverse
from django.contrib import messages
from Columns_definition.forms import ColumnsDefinitionsForms
from Columns_definition.models import sysColumns


 def update_table(request,id):

column_data = get_object_or_404(sysColumns, id = id)
columns_form = ColumnsDefinitionsForms(request.POST or None, request.FILES or None, instance = column_data)



if columns_form.is_valid():
    aciklama = request.POST.get('tabloid')
    columns_form.save()
    messages.info(request, "\'" + column_data.name + "\'" + "{}".format((": is updated")))
    return redirect("Columns_definition:columns_def")


context = {
    "columns_form":columns_form,
    "id":id,
}

return render(request, 'columnsCreate.html', context)

forms.py

from django import forms
from Columns_definition.models import sysColumns
from Utilities.custom_enum import DataTypes
from Table_definition.models import sysTables


class ColumnsDefinitionsForms(forms.ModelForm):

datatype = forms.ChoiceField(choices=DataTypes, required=False, label='Alan Veri Tipi' , widget=forms.Select(attrs={
      'placeholder': '','class':'form-control select-access-open select2-hidden-accessible popUp'
      }))
def __init__(self, *args, **kwargs):
    super(ColumnsDefinitionsForms, self).__init__(*args, **kwargs)
    self.fields['datatype'].choices.insert(0, ('','---------' ) )

tabloid = forms.ModelChoiceField(queryset=sysTables.objects.all(),
 empty_label=None,
widget=forms.Select(attrs={
      'class': 'form-control select-access-open select2-hidden-accessible'
      }))



class Meta:
    model = sysColumns


    fields = [  'tabloid',
                'name',
                'alias' , 
                'aliasLng1' ,
                'aliasLng2' ,
                'visible',
                'datatype',
                'datalength',
                'comboid' ,
                'reftype'  
                ]

    widgets = {

        'name':forms.TextInput(attrs={'placeholder': '','class':'rc-form-control-input form-control-user'}),
        'alias': forms.TextInput(attrs={'placeholder': '','class':'rc-form-control-input form-control-user'}),
        'aliasLng1': forms.TextInput(attrs={'placeholder': '','class':'rc-form-control-input form-control-user'}),
        'aliasLng2': forms.TextInput(attrs={'placeholder': '','class':'rc-form-control-input form-control-user'}),
        'visible': forms.CheckboxInput(attrs={'placeholder': '','class':'form-check-input','id':'visible'}),
        'datalength':forms.NumberInput(attrs={'placeholder': '','id':'datalength','class':'form-control  rc-form-control-input form-control-user'}),
        'comboid': forms.NumberInput(attrs={'placeholder': '','id':'comboid','class':'form-control  rc-form-control-input form-control-user'}),
        'reftype': forms.NumberInput(attrs={'placeholder': '','id':'reftype','class':'form-control  rc-form-control-input form-control-user'}),

    }

models.py

系统列

  from django.db import models
  import uuid
  from django.utils.translation import ugettext_lazy as _
  from Table_definition.models import sysTables
  from model_utils import Choices



DataTypes=(
(0 , 'String'),
(1 , 'Numeric'),
(2 ,'Currency' ),
(3 ,'DateTime' ),
(4 ,'Yes/No' ),
(5 ,'UUID' ),
(6 ,'Combo' ),
(7 ,'Image / Binary' ),
 )

class sysColumns(models.Model):

class Meta:
    db_table = 'sysColumns'

id = models.UUIDField(primary_key=True,default=uuid.uuid4, editable=False)
tableid=models.ForeignKey(sysTables, on_delete=models.CASCADE)
name = models.CharField(_('Alan Adı'),max_length=64,null=False, blank=False)
alias = models.CharField(_('Alan Açıklaması (Yerel Dil)'),max_length=100,null=False, blank=False)
aliasLng1 = models.CharField(_('Alan Açıklaması (Dil-1)'),max_length=100,null=False, blank=False)
aliasLng2 = models.CharField(_('Alan Açıklaması (Dil-2)'),max_length=100,null=True,blank=True)
visible = models.BooleanField(_('Görünüm'),null=True,blank=True)
datatype = models.IntegerField(_('Alanın Veri Tipi'),null=True,blank=True,choices=DataTypes)
datalength = models.IntegerField(_('Alanın Uzunluğu'),null=True,blank=True)
comboid = models.IntegerField(_('Kombo Değeri'),null=True,blank=True)
reftype =models.IntegerField(_('Referans Tipi'),null=True,blank=True)

def __str__(self):
    return self.name

系统表 - Models.py

from django.db import models
import uuid
from django.utils.translation import ugettext_lazy as _



class sysTables(models.Model):

class Meta:
    db_table = 'sysTables'

id = models.UUIDField(primary_key=True,default=uuid.uuid4, editable=False)
name = models.CharField(_('Tablo Adı'),max_length=64,null=False, blank=False)
alias = models.CharField(_('Tablo Açıklaması (Yerel Dil)'),max_length=100,null=False, blank=False)
aliasLng1 = models.CharField(_('Tablo Açıklaması (Dil-1)'),max_length=100,null=False, blank=False)
aliasLng2 = models.CharField(_('Tablo Açıklaması (Dil-2)'),max_length=100,null=True,blank=True)
chistory = models.BooleanField(_('Yeni Kayıt Tarihçesi '),null=True,blank=True)
rhistory = models.BooleanField(_('Kayıt Okuma Tarihçesi'),null=True,blank=True)
uhistory = models.BooleanField(_('Kayıt Güncelleme Tarihçesi'),null=True,blank=True)
dhistory = models.BooleanField(_('Kayıt Silme Tarihçesi '),null=True,blank=True)
log = models.BooleanField(_('Kayıt Logu'),null=True,blank=True)







def __str__(self):
    return self.alias

columnsCreate.html

<div class="row">
 <div class="col-md-12">
   <div class="card">
     <div class="card-header">
       <div class="row">
         <div class="col-md-10 offset-md-1">
           <div class="header-elements-inline">
             {% if islem_turu == "detay" %}

          <legend class="text-uppercase font-size-sm font-weight-bold">{% trans " Kolon Detay Kartı " %}</legend>

          {% elif islem_turu == "guncelle"%}

            <legend class="text-uppercase font-size-sm font-weight-bold">{% trans " Kolon Güncelle Kartı " %}</legend>

          {% else %}

            <legend class="text-uppercase font-size-sm font-weight-bold">{% trans " Kolon Oluşturma Kartı " %}</legend>

          {% endif %}

        </div>
      </div>
    </div>
  </div>

  <div class="card-body">
    <div class="row">
      <div class="col-md-10 offset-md-1">
        <form method="post">
          {% csrf_token %}

          {% for field in columns_form %}
          <div class="form-group row">
            <label class="col-lg-3 col-form-label"> {{field.label}}
            </label>
            <div class="col-lg-9">
              {{ field }}
            </div>
          </div>

          {% endfor %}





          {% if islem_turu == "detay" %}

          {% elif islem_turu == "guncelle" %}
          <button class="btn btn-info btn-md" style="margin:.5em; width:8em; float:right; color: #333;background: #41bd1e;" type="submit">
          <i class="icon-floppy-disk " style="color: #333; background:#41bd1e;"></i>&nbsp;&nbsp;{% trans "Kaydet" %}
        </button>

          {% else %}
          <button class="btn btn-info btn-md" style="margin:.5em; width:8em; float:right; color: #333;background: #41bd1e;" type="submit">
          <i class="icon-floppy-disk " style="color: #333; background:#41bd1e;"></i>&nbsp;&nbsp;{% trans "Kaydet" %}
        </button>
          <a href="{% url 'Columns_definition:columns_def'  %}" class="btn btn-danger btn-md"
            style="margin:.5em; width:8em; float:right;">
            <i class="fas fa-close"></i>&nbsp; {% trans "İptal" %}
          </a> 
          {% endif %}
      </div>
      </form>
    </div>
  </div>

</div>

combo selection list (1)

combo selection update (2)

columns list (3)

columns update (4)

编辑:当您检查 (1) 并按下更新按钮后,然后在图片 (2) 中,您可以看到我从 (1) 中的 (2) 中获得组合作为我的 selected modelchoicefield。但是在 (3) 中,我的 tableid 与 (4) 中的 tableid 不匹配。我无法进入 (4) 之前在 (3) 上 selected 的内容。相反,我从 modelchoicefield 中的数据库中获取了 tableid 值的第一个元素。

我希望 select column_data 中 table_id 的字段并将其发送到初始值并希望 select 它作为默认的 modelchoicefield。我在我的其他项目中做了很多例子,但不能在这个项目上解决。提前感谢您的帮助。

我想,问题的原因是 forms.py 中的变量名。在 Forms.py 中,tabloid 应定义为 tableid。由于您的项目使用 forms.py 中的模型库。表单和模型中的对象必须在 Django 项目中匹配。

此致,