我正在尝试更新业务模型。但是,出现错误
无法分配\“(,)\”:\“ BusinessModel.company \”必须是\“ Company \”实例。
我相信,由于公司在BusinessModel
中为FK,因此我正在使用公司实例保存到以下公司。
公司不是公司实例吗?这是我获取实例的助手功能
def get_instance(_object, encoded_id, slug=False, otherwise=None):
try:
if slug:
return _object.objects.get(slug=encoded_id)
else:
return _object.objects.get(pk=from_global_id(encoded_id)[1])
except _object.DoesNotExist:
return otherwise
这就是我所做的
class BusinessModel(models.Model):
ZERO = '0'
ONETOFIFETYTHOUSAND = '1 - 50000'
FIFETYTHOUSANDTOONELAKH = '50000 - 1Lakhs'
TOTAL_INVESTMENT = (
(ZERO, '0'),
(ONETOFIFETYTHOUSAND, '1 - 50000'),
(FIFETYTHOUSANDTOONELAKH, '50000 - 1Lakhs'),
)
FRANCHISE_FEE = TOTAL_INVESTMENT
company = models.ForeignKey(Company, related_name='company_business_model', on_delete=models.CASCADE)
industry = models.ForeignKey(Industry, null=True, related_name='industry', on_delete=models.SET_NULL)
segments = models.ForeignKey(Segment, on_delete=models.SET_NULL, null=True)
total_investment = models.CharField(max_length=50, choices=TOTAL_INVESTMENT, default=None)
franchise_fee = models.CharField(max_length=50, choices=FRANCHISE_FEE, default=None)
is_refundable = models.BooleanField(default=False)
space = models.CharField(max_length=50, blank=False, null=False, help_text="space in square feet") # choice field
class BusinessModelInput(graphene.InputObjectType):
company = graphene.String()
industry = graphene.String()
segments = graphene.String()
total_investment = graphene.String()
franchise_fee = graphene.String()
is_refundable = graphene.String()
space = graphene.String()
expanding_country = graphene.String()
expanding_city = graphene.String()
expanding_regions = graphene.String()
class UpdateBusinessModel(graphene.Mutation):
class Arguments:
input = BusinessModelInput(description="These fields are required", required=True)
id = graphene.String(description="Id of business model", required=True)
class Meta:
description = "Update Business Model Mutation"
errors = graphene.String()
business_model = graphene.Field(BusinessModelNode)
@staticmethod
def mutate(root, info, **args):
if not info.context.user.is_authenticated:
return UpdateBusinessModel(errors=json.dumps('Please Login to list your brand'))
try:
print('args', args.get("id"))
business_model_instance = get_instance(models.BusinessModel, args.get('id'))
company = get_instance(models.Company, args.get('input')['company'], slug=True)
print("company", company)
industry = models.Industry.objects.get(slug=args.get('input')['industry'])
segment = models.Segment.objects.get(slug=args.get('input')['segments'])
if business_model_instance and company and industry:
business_model_instance.company = company,
business_model_instance.industry = industry,
business_model_instance.segments = segment,
business_model_instance.total_investment = args.get('input')['total_investment'],
business_model_instance.franchise_fee = args.get('input')['franchise_fee'],
business_model_instance.is_refundable = args.get('input')['is_refundable'],
business_model_instance.space = args.get('input')['space'],
print('business_model instance', business_model_instance)
business_model_instance.save()
return UpdateBusinessModel(business_model=business_model_instance, errors=None)
except (models.BusinessModel.DoesNotExist, models.Company.DoesNotExist, models.Industry.DoesNotExist, models.Segment.DoesNotExist):
return UpdateBusinessModel(errors=json.dumps('Company should be required'))
为什么会出现错误?
答案 0 :(得分:3)
每次分配后都有逗号,这会将值转换为元组。删除它们。
business_model_instance.company = company # no comma