如何解决如何在django的数据库中存储Unique=True
我的应用保存不同学校的图书记录我有一个 Klass 模型,可以让每个学校键入学校的课程。我还有一个用于批量导入书籍详细信息的进出口资源。然而,我收到一个错误,因为已经有两所学校分别有表格 1、表格 2 和表格 3。它返回 MultipleObjectsReturned
错误
get() returned more than one Klass -- it returned 2!
我该如何帮助我的情况???
class ImportStudentsResource(resources.ModelResource):
school = fields.Field(attribute = 'school',column_name='school',widget=ForeignKeyWidget(School,'name'))
klass = fields.Field(attribute = 'klass',column_name='class',widget=ForeignKeyWidget(Klass,'name'))
stream = fields.Field(attribute = 'stream',column_name='stream',widget=ForeignKeyWidget(Stream,'name'))
class Meta:
model = Student
fields = ('school','student_id','name','year','klass','stream')
import_id_fields = ('student_id',)
import_order = ('school','stream')
class uploadStudents(LoginrequiredMixin,View):
context = {}
def get(self,request):
form = UploadStudentsForm()
self.context['form'] = form
return render(request,'libman/upload_student.html',self.context)
def post(self,request):
form = UploadStudentsForm(request.POST,request.FILES)
data_set = Dataset()
if form.is_valid():
file = request.FILES['file']
extension = file.name.split(".")[-1].lower()
resource = ImportStudentsResource()
if extension == 'csv':
data = data_set.load(file.read().decode('utf-8'),format=extension)
else:
data = data_set.load(file.read(),format=extension)
result = resource.import_data(data_set,dry_run=True,collect_Failed_rows=True,raise_errors=True)
if result.has_validation_errors() or result.has_errors():
messages.success(request,f'Errors experienced during import.')
print("error",result.invalid_rows)
self.context['result'] = result
return redirect('upload_students')
else:
result = resource.import_data(data_set,dry_run=False,raise_errors=False)
self.context['result'] = None
messages.success(request,f'Students uploaded successfully.')
else:
self.context['form'] = UploadStudentsForm()
return render(request,self.context)
class Student(models.Model):
school = models.ForeignKey(School,on_delete=models.CASCADE)
name = models.CharField(max_length=200)
Now = datetime.datetime.Now()
YEAR = [(str(a),str(a)) for a in range(Now.year-2,Now.year+2)]
year = models.CharField(max_length=4,choices = YEAR)
student_id = models.CharField(max_length=20,unique=True)
klass = models.ForeignKey(Klass,on_delete=models.CASCADE)
stream = models.ForeignKey(Stream,on_delete=models.CASCADE)
解决方法
您的标题和问题有点令人困惑,但我认为这很可能发生,因为每当您导入数据时,逻辑都无法唯一标识 'klass' 的唯一实例。您正在使用与类的外键关系的“名称”属性。确保“名称”唯一标识 Klass 的单个实例。
如果 name 不是唯一的,那么您可以考虑使用唯一的字段,例如 Klass 主键。如果这是不可能的,那么您将不得不想出某种方法来唯一标识要在 FK 关系中使用的 Klass,也许使用字段的组合(学校 + 班级?)。您必须继承 ForeignKeyWidget
才能处理这种情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。