【问题标题】:Inserting a foreign field in django forms在 django 表单中插入一个外部字段
【发布时间】:2015-06-04 00:03:23
【问题描述】:

我有一个具有以下字段的模型:

class Dataset(models.Model):
    dataset_id = models.TextField(primary_key=True)
    title = models.TextField(blank=True, null=True)
    taxonomy = models.ForeignKey('Organism', blank=True, null=True)
    citation = models.TextField(blank=True, null=True)
    summary = models.TextField(blank=True, null=True)
    contributor = models.TextField(blank=True, null=True)  # This field type is a guess.
    submitted = models.DateField(blank=True, null=True)
    last_updated = models.DateField(blank=True, null=True)
    author = models.ForeignKey('Users', db_column='author', blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'dataset'

以及下面的表格和视图。

class DatasetForm(forms.ModelForm):
    dataset_id = forms.CharField(required=True,help_text="dataset_id")
    title = forms.CharField(required=True,help_text="title")
    taxonomy = forms.IntegerField(required=True,help_text="taxanomy id (ingeter)")
    citation = forms.CharField(required=True,help_text="citation")
    summary = forms.CharField(required=True,help_text="summary")
    contributor = forms.CharField(help_text="contributor (separated by comma)")
    submitted = forms.DateField(initial = datetime.now,required=True,help_text="Submitted date")
    last_updated = forms.DateField(initial = datetime.now,required=True,help_text="Last Updated date")
    author = forms.IntegerField(required=True,help_text="Author For now enter an integer")

    class Meta:
        model = Dataset
        fields = ('dataset_id','title','taxonomy','citation','summary','contributor','submitted','last_updated','author')

和视图:

def add_dataset(request):
context_dict = {}
if request.method == 'POST':
    req_dict = request.POST.copy()
    req_dict['taxonomy'] = Organism.objects.filter(taxonomy_id=request.POST['taxonomy'])
    req_dict['author'] = Users.objects.filter(id=request.POST['author'])
    form = DatasetForm(req_dict)
    if form.is_valid():
        return HttpResponseRedirect('/msrb/')
    else:
        print form
        print form.errors
else:
    form = DatasetForm()
context_dict['form'] = form
template = get_template('msrb/add_dataset.html')
context = RequestContext(request,context_dict)
return HttpResponse(template.render(context))

我需要插入数据库。 现在,当我将 request.POST 复制到另一个变量并尝试验证表单时,我会收到 ForeignKey 的字段错误

输入一个整数。

但是,如果我不复制 request.POST,我也无法验证表单。

我不知道如何进行。任何指针都会有所帮助

【问题讨论】:

    标签: django forms


    【解决方案1】:

    根据您的表单定义,taxonomyauthor 是 IntergerField。您复制的 dict 将 QuerySet 设置为表单中的值,这显然不是数字。

    您为什么选择覆盖 ModelForm 中的字段?您是否希望您的用户键入对象的id 而不是使用select?因为在那种情况下,我只会覆盖Meta 中的小部件。

    class DatasetForm(forms.ModelForm):
        class Meta:
            model = Dataset
            fields = ('dataset_id','title','taxonomy','citation','summary','contributor','submitted','last_updated','author')
            widgets = {
                'taxonomy': forms.NumberInput,
                'author': forms.NumberInput,
            }
    

    更多信息:https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#overriding-the-default-fields

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-27
      • 2018-05-07
      • 2021-11-02
      • 2019-05-07
      • 2011-06-10
      • 1970-01-01
      相关资源
      最近更新 更多