2017-05-17 14 views
0

I持って次のモデル:ジャンゴ1.11:のManyToManyFieldを動作させることはできません

class Address(models.Model): 
    address1 = models.CharField(max_length=150, null=True) 
    address2 = models.CharField(max_length=150, null=True, blank=True) 
    city = models.CharField(max_length=50, null=True) 
    state_province = models.CharField(max_length=50, null=True) 
    zipcode = models.CharField(max_length=10, null=True) 
    country = models.CharField(max_length=3, default='USA', null=False) 
    created_at = models.DateTimeField(db_index=True, auto_now_add=True) 
    updated_at = models.DateTimeField(db_index=True, auto_now=True) 

    class Meta: 
     db_table = 'addresses' 

この1 .....

class User(models.Model, AbstractBaseUser, PermissionsMixin): 

    email = models.EmailField(db_index=True, max_length=150, unique=True, 
           null=False) 
    first_name = models.CharField(max_length=45, null=False) 
    last_name = models.CharField(max_length=45, null=False) 
    mobile_phone = models.CharField(max_length=12, null=True) 
    profile_image = models.CharField(max_length=150, null=True) 
    is_staff = models.BooleanField(db_index=True, null=False, default=False) 
    is_active = models.BooleanField(
     _('active'), 
     default=True, 
     db_index=True, 
     help_text=_(
      'Designates whether this user should be treated as active. ' 
      'Unselect this instead of deleting accounts.' 
     ), 
    ) 

    addresses = models.ManyToManyField(Address), 


    USERNAME_FIELD = 'email' 
    objects = MyCustomUserManager() 

    def __str__(self): 
     return self.email 

    def get_full_name(self): 
     return self.email 

    def get_short_name(self): 
     return self.email 

    class Meta: 
     db_table = 'users' 

私の最初の謎でモデルを移行するということですusersテーブルには「アドレス」フィールドがなく、複数のリレーションシップを維持するためにデータベース内のピボットテーブルもありません。 ManyToManyペイロードはどのように保管されていますか?

第2に、私の目標は、ユーザー用に複数のアドレスを持つことです。他のモデルもアドレスを持つことができるので、複数の「アドレス」を持つようにしたい私はAddressモデルにForeignKeysとの12の異なる "所有者"フィールドを持たせたくありません。

So.私はこれを試してみてください。

from myApp.models import User 
from myApp.models import Address 
user = User(email="[email protected]", first_name="john", last_name="doe", mobile_phone="444") 
# the model permits partial address fields, don't worry about that. 
address = Address(city="New York", zipcode="10014") 

は今、私はuser.addressesaddressを追加しようと、私はエラーを取得しています。

user.addresses.add(address) 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-5-0337af6b1cd4> in <module>() 
----> 1 user.addresses.add(address) 

AttributeError: 'tuple' object has no attribute 'add' 

ヘルプ?

答えて

3

多対多フィールドの定義の後に余分なカンマがあり、タプルに変換します。これを削除すると、移行によって仲介テーブルが作成され、そのuser.addresses.add()が動作することがわかります。

+0

私はそれを逃したとは思わない。ありがとう!そのトリックをした。 – JasonGenX

関連する問題