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字段本身