Задать вопрос
google_online
@google_online
My morning begins with coffee and Twitter.

Почему не получается сохранить в модель ссылку на аватар пользователя Facebook?

DRF and Django-Allauth. Я получаю ссылку на на аватар пользователя Facebook, затем пробую его сохранить profile.save() но получаю
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: UNIQUE constraint failed: user_profile.user_id


my model.py
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

from allauth.account.signals import user_signed_up, user_logged_in


from allauth.socialaccount.models import SocialAccount
import hashlib


try:
    from django.utils.encoding import force_text
except ImportError:
    from django.utils.encoding import force_unicode as force_text


class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='userprofile')
    city = models.CharField(max_length=30, blank=True)
    about = models.TextField(blank=True)
    avatar = models.ImageField(upload_to='avatars/', verbose_name='Images', blank=True)
    sound = models.BooleanField(default=False)
    points = models.DecimalField(max_digits=4, decimal_places=2, default=0.00)
    energy = models.IntegerField(default=0)
    avatar_url = models.URLField(max_length=256, blank=True, null=True)

    class Meta:
        db_table = 'user_profile'
        verbose_name = 'Profile'
        verbose_name_plural = 'Profiles'

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


// GET PICTURE FROM SOCIAL
@receiver(user_logged_in)
def set_initial_user_names(request, user, sociallogin=None, **kwargs):
    preferred_avatar_size_pixels = 256

    picture_url = "http://www.gravatar.com/avatar/{0}?s={1}".format(
        hashlib.md5(user.email.encode('UTF-8')).hexdigest(),
        preferred_avatar_size_pixels
    )

    if sociallogin:
 
        if sociallogin.account.provider == 'facebook':
            picture_url = "http://graph.facebook.com/{0}/picture?width={1}&height={1}".format(
                sociallogin.account.uid, preferred_avatar_size_pixels)

    profile = UserProfile(user_id=user.id, avatar_url=picture_url)

    profile.save()


@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.userprofile.save()
  • Вопрос задан
  • 216 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ivlevdenis_ru
python, django, celery, redis, kivy, git
Делай проверки на существование или используй get_or_create.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы