当前位置: 首页 > 知识库问答 >
问题:

如何解决django导入导出中ForeignKeywidget返回的多个对象

解翰采
2023-03-14

我有一个资源可以帮助我将数据导入到模型中,但它不起作用。我尝试了所有可能的选择,但没有成功。这就是资源。

class ImportStudentsResource(resources.ModelResource):
    klass = fields.Field(attribute = 'class',column_name='class',widget= ForeignKeyWidget(Klass,'name'))
    stream = fields.Field(attribute = 'stream',column_name='stream',widget=ForeignKeyWidget(Stream,'name'))
    gender = fields.Field(attribute = 'gender',column_name='gender', widget=ForeignKeyWidget(Gender, 'name'))
    school = fields.Field(attribute = 'school',column_name='school', widget=ForeignKeyWidget(School, 'name'))
    class Meta:
        model = Students
        fields = ('school','adm','name','kcpe','klass','stream','gender','notes')
        import_id_fields = ('adm',)
        import_order = ('school','adm','name','kcpe','klass','stream','gender','notes')

这是要通过资源导入模型的数据

这是Traceback。

Traceback (most recent call last):
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\django\views\generic\base.py", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\django\views\generic\base.py", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File "D:\Python\Django\Links Online Exams\Links_Online_Results\students\views.py", line 52, in post
    result = resource.import_data(data_set, dry_run=True, collect_failed_rows=True, raise_errors=True)
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\import_export\resources.py", line 741, in import_data
    return self.import_data_inner(dataset, dry_run, raise_errors, using_transactions, collect_failed_rows, **kwargs)
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\import_export\resources.py", line 788, in import_data_inner
    raise row_result.errors[-1].error
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\import_export\resources.py", line 658, in import_row
    self.import_obj(instance, row, dry_run)
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\import_export\resources.py", line 512, in import_obj
    self.import_field(field, obj, data)
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\import_export\resources.py", line 495, in import_field
    field.save(obj, data, is_m2m)
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\import_export\fields.py", line 110, in save
    cleaned = self.clean(data)
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\import_export\fields.py", line 66, in clean
    value = self.widget.clean(value, row=data)
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\import_export\widgets.py", line 396, in clean
    return self.get_queryset(value, row, *args, **kwargs).get(**{self.field: val})
  File "D:\Python\Django\Links Online Exams\env\lib\site-packages\django\db\models\query.py", line 433, in get
    raise self.model.MultipleObjectsReturned(
students.models.Klass.MultipleObjectsReturned: get() returned more than one Klass -- it returned 2!

无值的可能原因

class StudentsForm(forms.ModelForm):
    class Meta:
        model = Students
        fields = ("school","name","adm",'klass',"stream","kcpe","gender","notes")
        widgets = {
            'school':forms.TextInput(attrs={"class":'form-control','value':'','id':'identifier','type':'hidden'}),
            'name':forms.TextInput(attrs={"class":'form-control'}),
        }

    def __init__(self, school, *args, **kwargs):
        super(StudentsForm, self).__init__(*args, **kwargs)
        self.fields['klass'] = forms.ModelChoiceField(
            queryset=Klass.objects.filter(school=school),label='Class')
        self.fields['stream'].queryset = Stream.objects.none()
        if 'klass' in self.data:
            try:
                klass = int(self.data.get('klass'))
                self.fields['stream'].queryset = Stream.objects.filter(klass_id=klass).order_by('name')
            except (ValueError, TypeError):
                pass  # invalid input from the client; ignore and fallback to empty City queryset
        elif self.instance.pk:
            self.fields['stream'].queryset = self.instance.klass.stream_set.order_by('name')

共有1个答案

邢财
2023-03-14

您违反了ForeignKey类(klass)(以及流)行的约束

Jaq / class 2
Lucy / class 2
# only 1 can have 2 as its a ForeignKey
# same error will happen in stream row 4 Eagle 2 Hawk

您应该使用多个字段来代替外键

文件:https://docs.djangoproject.com/en/3.2/ref/models/fields/#manytomanyfield

 类似资料:
  • 问题内容: 我是Nodejs的新手。如何导出多个对象?例如 我想使用类似的模型: 我想使用类似这样的对象: 谢谢你的建议:D 更新 :解决以下方法: 但是我还有另一个问题。如何动态分配模型? 更新通过 以下方式解决了第二个问题: 问题答案: 只需将它们包装在对象文字中即可。在纯JS(没有CoffeeScript)中,将是: 在coffeescript中,您使用缩进,但要创建空对象时除外:

  • 用例很简单:我只想导出一个名称与导入时相同的对象。 例如: 但这并不起作用。我必须写: 但这很奇怪。正确的方法是什么? 更新: 感谢帮助和参考。我用许多线索解决了我的问题。下面给大家分享一些我常见的案例和解决方法。

  • 我是Java开发新手,不熟悉各种导入(Maven、Git等),所以我简单地说: 这两个没有在代码中解决我正在检查,我不知道我应该采取什么样的行动,也不知道我应该导入什么来解决它,但它可能是一些流行的库。 是否有完整的指南指导开发人员如何在eclipse中导入包(例如,C#开发人员使用Nuget,尽管有大量手工制作的包),或者他们真的使用所有这些巨大的导入选择器?

  • 在我的pom.xml我有这个: 作为依赖,我有这些: 当我建立我的。jar与mvn clean一起安装,并将其上传到AEM。我看到了: 这些红色的“多余”包裹,它都解决不了的是什么,我该怎么解决? 在我构建软件包并将其上传到AEM之前,如何防止这种情况发生?

  • 问题内容: 我看了很多类似的问题,但解决方案并没有帮助我:( 这是我的openjfx库 这是JFX文档 我可以通过两种方式导入库: 1.在Java构建路径中,我可以以 这种方式使用所有类,而不会出现任何问题……但是我无法加载Java文档或 源代码,如果这样做,它将无法正常工作。 要么… 2.编辑已安装的JRE定义 这种方式使我像其他问题中所解释的那样在已 安装的jre中添加jfxrt.jar,并为

  • 我正在开发一个简单的JavaFX程序HelloFX。我用ant执行诸如构建或启动之类的任务。我对此没有任何问题,它可以完美地工作,因此代码和库在build.xml中链接良好,正如您在代码中看到的那样。 但是,VSCode找不到JavaFX,并表示导入javafx无法解析。所以我想知道VSCode如何找到Java依赖关系?他怎么能像蚂蚁一样找到JavaFX呢?我认为VSCode使用build.xml