如何解决如何在 django-import-export 中解决 MultipleObjectsReturned with ForeignKeywidget
我有一个资源可以帮助我将数据导入我的模型,但它不起作用。我已经尝试了所有可能的选择,但没有成功。 这是资源。
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','notes')
这是通过资源导入到模型中的数据
这是回溯。
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,**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,**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!
None 值的可能原因
class StudentsForm(forms.ModelForm):
class Meta:
model = Students
fields = ("school","name","adm","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,**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')
解决方法
您违反了类(klass)(以及流)行的 ForeignKey
约束
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
您应该使用 Foreignkey
字段
文档:https://docs.djangoproject.com/en/3.2/ref/models/fields/#manytomanyfield
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。