Джанго модель создать не работает

python django django-models

631 просмотра

1 ответ

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

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()

Отпечатки сделаны, и выглядят правильно, а count () возвращает 0. Я пытаюсь создать объекты в админке, но получаю следующую ошибку:

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

Я думаю, что это еще одна проблема, потому что, если я прокомментирую отношения «многие ко многим», это будет сделано без ошибок (все еще нет новых записей). Я упомянул об этом просто, если это могло бы помочь.

Я проверил базу данных, таблицы есть, новых миграций тоже не обнаружено.

Будем благодарны за любую помощь и идею о том, в чем может быть проблема!

Автор: user24353 Источник Размещён: 08.11.2019 11:01

Ответы (1)


1 плюс

Решение

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

def save(self, *args, **kwargs):
    if not self.pk:
        ...
    return super(SocialProfile, self).save(*args, **kwargs)
Автор: Daniel Roseman Размещён: 20.08.2016 08:07
Вопросы из категории :
32x32