2016-08-20 2 views
1

私は、SocialProfileという名前の私のアプリに新しいモデルを追加しました。このモデルは、UserProfileモデルと1対1の関係を持つユーザーの社会関連のプロパティを保持する責任があります。これはmodels.pyでSocialProfileモデルです:djangoモデルの作成が機能しません

class SocialProfile(models.Model): 
    profile = models.OneToOneField('UserProfile', on_delete=models.CASCADE) 
    facebook_profiles = models.ManyToManyField('FacebookContact', related_name='synced_profiles', blank=True) 
    google_profiles = models.ManyToManyField('GoogleContact', related_name='synced_profiles', blank=True) 
    hash = models.CharField(max_length=30, unique=True, blank=True) 

    def save(self, *args, **kwargs): 
     if not self.pk: 
      hash = gen_hash(self.id, 30) 
      while SocialProfile.objects.filter(hash=hash).exists(): 
       hash = gen_hash(self.id, 30) 
      self.hash = hash 

    def __str__(self): 
     return str(self.profile) 

今、私は同期のFacebook & Googleプロフィールのための記録を保持します。問題は、新しいオブジェクトを作成しても実際にデータベースにレコードが追加されないということです。スクリプトや管理者でインスタンスを作成することはできません。スクリプトの場合は、次のエラーなしで実行されますが、にはレコードが作成されません:

for profile in UserProfile.objects.all(): 
    sp = SocialProfile.objects.create(profile=profile) 
    print(profile, sp) 

SocialProfile.objects.count() 

プリントは、私が管理者でオブジェクトを作成してみたが、私が手に行われ、正しい見て、カウントが()は0を返していますエラー以下:

"{{socialprofile object}}" needs to have a value for field "socialprofile" before 
this many-to-many relationship can be used. 

私は、多対多の関係をコメントする場合、それはエラー(まだ新しいレコード)せずに、実行されるためそれは、別の問題だと思います。私はそれが助けになるかもしれないと言いました。

私はデータベースをチェックしましたが、そこにテーブルがあり、新しいマイグレーションも検出されませんでした。

何が問題になるかについての助力とアイデアは高く評価されます!

+0

私はさらにデータベースを削除し、新しいデータベースを作成しましたが、それでも同じことが起こりました。 – user24353

+0

あなたはUser Profileモデルも投稿できますか? –

答えて

1

saveメソッドを上書きして、実際に何も保存しないようにしました。最後にスーパークラスメソッドを呼び出す必要があります:

def save(self, *args, **kwargs): 
    if not self.pk: 
     ... 
    return super(SocialProfile, self).save(*args, **kwargs) 
+0

ありがとう、そんなルーキーミス! – user24353

関連する問題