2016-08-20 5 views
1

Я добавил новую модель в мое приложение с именем SocialProfile, которое отвечает за сохранение социальных свойств пользователя, который имеет отношения «один к одному» с моделью UserProfile. Это модель SocialProfile в models.py:django model create не работает

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

Можете ли вы опубликовать свою модель профиля пользователя? –

ответ

1

Вы перезаписали метод сохранения, чтобы он никогда ничего не экономил. Вы должны вызвать метод суперкласса в конце:

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

Спасибо, такая ошибка новобранец! – user24353