我不确定如何描述这个问题,但我会尝试一下。
背景信息
我的Django Web应用程序中有一个用户可以导入其他用户的功能。用户可以通过拖放导入.csv文件转换为JSON 2D数组(使用Papaparse JS)
在视图中,我遍历2D数组中的元素并创建一个" Importuser"其中包含一些属性,如" firstname"," lastname",email等等。
class Importuser:
firstname = None
lastname = None
email = None
import_errors = []
def __init__(self, fn, ln, e):
self.firstname = fn
self.lastname = ln
self.email = e
class Importerror:
message = None
type = None
def __init__(self, m, t):
self.message = m
self.type = t
在for循环中,我还验证了电子邮件地址,因此没有加倍的用户。
data = jsonpickle.decode(method.POST["users"])
users = []
for tempuser in data:
u = validate(Importuser(tempuser[0], tempuser[1], tempuser[2])
users.append(u)
在验证功能中,我检查是否有任何用户使用相同的电子邮件
def validate(user : Importuser):
user_from_db = User.objects.filter(email=user.email)
if user_from_db:
user.import_errors.append(Importerror("The user exists already!", "doubleuser"))
return user
问题
for循环完成后所有用户都有相同的错误,但在执行for循环时打印每个用户时没有。每个用户中的Importerror-Object引用相同的内存位置,但在我的测试导入中应该只有一个用户有错误。
test.csv:
Dave,Somename,dave@example.com
Joe,Somename2,joe@example.com
Yannik,Somename3,yannik@example.com <<That's me (exsiting user)
我做错了什么?有人可以帮我理解为什么会这样吗?
答案 0 :(得分:1)
您已将import_errors
定义为类级静态,因此它在Importuser
的所有实例之间共享。
请参阅:Static class variables in Python
针对您的特定问题,请将您的课程重写为
class Importuser:
def __init__(self, firstname, lastname, email):
self.firstname = firstname
self.lastname = lastname
self.email = email
self.import_errors = []
class Importerror:
def __init__(self, message, type):
self.message = message
self.type = type
答案 1 :(得分:0)
import_errors
是ImportUser
的类属性。它应该是一个instance-attribute:
class Importuser:
def __init__(self, fn, ln, e):
self.firstname = fn
self.lastname = ln
self.email = e
self.import_errors = []