Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django ModelChoiceField发行版_Django_Django Models_Django Forms_Django Views - Fatal编程技术网

Django ModelChoiceField发行版

Django ModelChoiceField发行版,django,django-models,django-forms,django-views,Django,Django Models,Django Forms,Django Views,我遇到了以下情况,我有一个相当大的遗留模型(尽管效果很好),并且需要它的一个字段作为我的一个表单的一个独特下拉列表: 旧表: class SummaryView(models.Model): ... Period = models.CharField(db_column='Period', max_length=10, blank=True, null=True) ... def __str__(self): return self.Period class Meta: ma

我遇到了以下情况,我有一个相当大的遗留模型(尽管效果很好),并且需要它的一个字段作为我的一个表单的一个独特下拉列表:

旧表:

class SummaryView(models.Model):
...
Period = models.CharField(db_column='Period', max_length=10, blank=True, null=True)
...

def __str__(self):
    return self.Period

class Meta:
    managed = False  # Created from a view. Don't remove.
    db_table = 'MC_AUT_SummaryView'
内部模型:

class BillCycle(models.Model):
...
Name = models.CharField(max_length=100, verbose_name='Name')
Period = models.CharField(max_length=10, null=True, blank=True)  
Version = models.FloatField(verbose_name='Version', default=1.0)  
Type = models.CharField(max_length=100, verbose_name='Type', choices=billcycle_type_choices)  
Association = models.ForeignKey(BillCycleAssociation, on_delete=models.DO_NOTHING) 
...

def __str__(self):
    return self.Name
因为我不想通过外键连接它们(因为SummaryView不是由Django管理的),所以我尝试了一个解决方案,我已经使用过很多次了。在我的表单中,我创建了一个ModelChoiceField,它指向我的旧模型:

class BillcycleModelForm(forms.ModelForm):
period_tmp = forms.ModelChoiceField(queryset=SummaryView.objects.values_list('Period', flat=True).distinct(),
                                    required=False, label='Period')

....

class Meta:
    model = BillCycle
    fields = ['Name', 'Type', 'Association', 'period_tmp']
在我看来,我试图用用户表单输入覆盖我的内部模型中的Period字段:

def billcycle_create(request, template_name='XXX'):
form = BillcycleModelForm(request.POST or None)

data = request.POST.copy()

username = request.user
print("Data:")
print(data)

if form.is_valid():
    initial_obj = form.save(commit=False)

    initial_obj.ModifiedBy = username
    initial_obj.Period = form.cleaned_data['period_tmp']
    initial_obj.Status = 'Creating...'

    print("initial object:")
    print(initial_obj)

    form.save()
....
到目前为止一切顺利:

  • 下拉列表已正确呈现
  • 在视图(“数据”)中的打印语句中,我看到了所需的信息: '类型':['Create/Delta'],'Association':['CP'],'period_tmp':['2019-12']

我仍然得到一个选择一个有效的选项。该选项不是可用选项之一。表单中有错误。有什么想法吗?

我注意到表单中有
'Name'
字段,但它不在数据的打印语句中。这就是问题所在吗?不幸的是不是,我只是把它漏掉了,因为它没有相关性(是一个自由文本字段,没有外键或任何东西)该错误是为哪个字段生成的?句点\u tmp字段本身