首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法分配“u‘”:"Company.parent“必须是"Company”实例

无法分配“u‘”:"Company.parent“必须是"Company”实例
EN

Stack Overflow用户
提问于 2013-08-03 02:39:37
回答 1查看 4.8K关注 0票数 1

我每一次尝试都会得到这个。

无法分配“u‘”:"Company.parent“必须是"Company”实例。我不知道还能做什么。视图代码还未完成,很抱歉。我是不是把错误的参数传递给表单了?

我有以下模式:

models.py

代码语言:javascript
复制
class Company(AL_Node):
  parent = models.ForeignKey('self',
                             related_name='children_set',
                             null=True,
                             db_index=True)
  node_order_by = ['id', 'company_name']
  id = models.AutoField(primary_key=True)
  company_name = models.CharField(max_length=100L, db_column='company_name') # Field name made lowercase.
  next_billing_date = models.DateTimeField()
  last_billing_date = models.DateTimeField(null=True)
  weekly = 'we'
  twice_a_month = '2m'
  every_two_weeks = '2w'
  monthly = 'mo'
  billing_period_choices = (
    (weekly, 'Weekly'),
    (every_two_weeks, 'Every two weeks'),
    (twice_a_month, 'Every two weeks'),
    (monthly, 'Monthly'),
  )
  billing_period = models.CharField(max_length=2,
                                    choices=billing_period_choices,
                                    default=weekly)

  objects = CompanyManager()

以下forms.py:

代码语言:javascript
复制
class newCompany(ModelForm):
  company_name = forms.CharField(label='Company Name',
                                widget=forms.TextInput(attrs={'class': 'oversize expand input-text'}))
  billing_period = forms.ModelChoiceField
  next_billing_date = forms.CharField(widget=forms.TextInput(attrs={'class': 'input-text small', 'id': 'datepicker'}))
  parent = forms.CharField(widget=forms.HiddenInput(), required=False)

  class Meta:
    model = Company
    fields = ["company_name", "parent", "billing_period", "next_billing_date"]

以下意见如下:

代码语言:javascript
复制
def create_company(request):
  userid = User.objects.get(username=request.user).id
  my_company_id = CompanyUsers.objects.get(user_id=userid).company_id
  my_company_name = Company.objects.get(id=my_company_id).company_name
  machines = Title.objects.raw(
    'select machines.id, title.name, machines.moneyin, machines.moneyout, moneyin - moneyout as profit, machines.lastmoneyinoutupdate, (select auth_user.username from auth_user where machines.operator = auth_user.id) as operator, (select auth_user.username from auth_user where machines.readers = auth_user.id) as readers from machines, title where machines.title = title.id and machines.company_id =%s',
    [my_company_id])
  if request.method == 'POST':
    form_company = newCompany(request.POST)
    if form_company.is_valid():
      new_company = form_company.save(commit=False)
      new_company.parent = my_company_id
      if request.POST.get('select_machine'):
        selected_machine = request.POST.getlist('select_machine')
        percentage = request.POST.get('percentage')
        if not Beneficiary.objects.check_assign_machine(my_company_id, selected_machine, percentage):
           target_company_name = new_company.company_name
           target_company_id = Company.objects.get(company_name=target_company_name).id
           new_company.save()
           Machines.objects.assign_machine(target_company_id, selected_machine)
           Beneficiary.objects.create_beneficiary(percentage, target_company_name, my_company_id, selected_machine)
        else:
          invalid_machines = Beneficiary.objects.check_assign_machine(my_company_id, selected_machine, percentage)
          return render(request, 'lhmes/createcompany.html',
                {'form_company': form_company, 'machines': machines, 'my_company_name': my_company_name, 'invalid_machines' : invalid_machines})
      else:
        new_company.save()

  else:
    form_company = newCompany()

  return render(request, 'lhmes/createcompany.html',
                {'form_company': form_company, 'machines': machines, 'my_company_name': my_company_name})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-04 17:53:45

错误消息显示您正在尝试使用字符串设置关系,但是Django希望值是Company模型的一个实例。您应该使用一个真实的模型实例来分配外键字段,而不是只分配主键。

我在代码中发现了一些位置,您在代码中分配了一个PK:

代码语言:javascript
复制
new_company.parent = my_company_id

其中,模型希望它是一个实例:

代码语言:javascript
复制
new_company.parent = Company.objects.get(id=my_company_id)

我真的不记得这是否管用,但你可以试试:

代码语言:javascript
复制
new_company.parent_id = int(my_company_id)

这将节省一次访问数据库的时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18028733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档