python
  • django
  • rest
  • django-rest-framework
  • 2017-06-19 8 views 0 likes 
    0

    ジャンゴ/ Pythonは「1」を割​​り当てることができません:「Company.merchantは」「商人」のインスタンスでなければなりません

    エラーself.companies.merchantにIDを与えるための方法を考え出すことができませんでした: "1"を割り当てることはできません: "Company.merchant"は "商人"インスタンスでなければなりません。

    このような別の質問がありましたが、わかりませんでした。

    self.merchant = Merchant.objects.create(
         name='merchant', 
         ref_code='45664', 
        ) 
    
        self.companies = Company.objects.create(
         name='companyone', 
         ref_code='222', 
         merchant=Merchant.objects.first().id, 
        ), 
        self.merchant.companies.add(*self.companies) 
    

    マーチャントモデル:

    class Merchant(models.Model): 
        name = models.CharField(max_length=255) 
        ref_code = models.CharField(max_length=32) 
    

    会社モデル:

    class Company(models.Model): 
        name = models.CharField(max_length=255) 
        ref_code = models.CharField(max_length=32) 
        merchant = models.ForeignKey(
         'accounts.Merchant', related_name='companies') 
    
    +1

    Merchantインスタンス(またはmerchant_id)が既に設定されている会社を作成した場合、「merchant.companies.add(...)」の呼び出しは不要です。企業は_already_です商人にリンクされています。 –

    答えて

    2

    あなたはMerchantmerchant引数に)インスタンスまたはidのいずれかを提供しますが、merchant_id引数に割り当てる必要があります。だから、これは動作します:あなたはCompanyインスタンスおよび反復可能ではありませんself.companiesを展開しようとしているため

    self.companies = Company.objects.create(
         name='companyone', 
         ref_code='222', 
         merchant_id=Merchant.objects.first().id, 
        ), 
    

    それとも

    self.companies = Company.objects.create(
         name='companyone', 
         ref_code='222', 
         merchant=Merchant.objects.first(), 
        ), 
    

    はまた、あなたは、 TypeErrorになるだろう。 そして、@ brunodesthuilliersが指摘したように、商人はすでに作成済みの Companyオブジェクトに接続されています。

    0
    self.companies = Company.objects.create(
        name='companyone', 
        ref_code='222', 
        merchant_id=Merchant.objects.first().id, 
    ) 
    
    +0

    答えを説明するテキストを追加してください – EBH

    関連する問題