繁体   English   中英

如何解决 Django 中的 ValueError 分配问题?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM