[英]How to solve the problem of "ValueError: expected square matrix"?
[英]How to solve ValueError Assign problem in Django?
我用 Django 创建了一个系统。 在这个系统中,用户上传一个 excel 表,我从该 excel 创建一个新客户。 但是在这个 excel 我有 2 个重要的列。 他们是实体和父母。 我想当用户上传这个 excel 表但如果有一个实体或父级未在我的数据库中注册,我想创建它然后保存它。 我为此使用 get_or_createe ,但出现错误:
/customers/upload 处的 ValueError 无法分配“(<ParentCompany:TESTP>,False)”:“Customer.parent”必须是“ParentCompany”实例。
我该如何解决?
视图.py
def customer_excel_upload(request):
current_user = request.user
userP = UserProfile.objects.get_or_create(username=current_user)
company = userP[0].company
if request.method == 'POST':
form = CustomerExcelForm(request.POST, request.FILES)
if form.is_valid():
new_excel = form.save()
new_excel = new_excel.excel
df = pd.read_excel('C:/fray/otc/'
+
new_excel.name,
index_col=0,
engine='openpyxl')
for index, row in df.iterrows():
if row is not None:
new_customer = Customer()
new_customer.customer_name = index
country = Country.objects.get(country_name=row['Country'])
new_customer.address = row['Address']
new_customer.customer_number = row['Customer Number']
new_customer.phone_number = row['Phone Number']
new_customer.email_address = row['Email Adress']
new_customer.credit_limit = row['Credit Limit']
new_customer.currency_choice = row['Currency choice']
new_customer.risk_rating = row['Risk rating']
parent = ParentCompany.objects.get_or_create(parent=row['Parent Company'],
company=request.user.company)
entity = Entities.objects.get_or_create(entities=row['Entity'], company=request.user.company)
new_customer.parent = parent
new_customer.entity = entity
new_customer.country = country
new_customer.company = company
new_customer.save()
return redirect('home')
else:
form = CustomerExcelForm()
context = {
'form': form
}
return render(request, 'customer_excel_upload.html', context)
模型.py
class Customer(models.Model):
customer_name = models.CharField(max_length=100)
country = models.ForeignKey(Country, on_delete=models.CASCADE, null=True, unique=False)
address = models.CharField(max_length=250),
...
parent = models.ForeignKey(ParentCompany, on_delete=models.CASCADE, blank=True, null=True)
entity = models.ForeignKey(Entities, on_delete=models.CASCADE, blank=True, null=True)
class ParentCompany(models.Model):
parent = models.CharField(max_length=50, null=True)
company = models.ForeignKey(CompanyProfile, on_delete=models.CASCADE, null=True, unique=False)
class Entities(models.Model):
entities = models.CharField(max_length=250)
company = models.ForeignKey(CompanyProfile, on_delete=models.CASCADE, null=True, unique=False)
如错误消息所述, get_or_create
不会直接返回 object。 您可以查看文档。 它返回一个(object, created)
的元组。
你的返回正确
(<ParentCompany: TESTP>, False)
你只需要得到第一部分。
您可以更改您的get_or_create
语句以获得第一个这样的语句:
ParentCompany.objects.get_or_create(parent=row['Parent Company'], company=request.user.company)[0]
注意末尾的[0]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.