УНИКАЛЬНОЕ ограничение не выполнено в django тестовом клиенте - PullRequest
0 голосов
/ 23 марта 2020

У меня есть такой код внутри tests.py:

thirduser = User(
    username = "thirduser",
    password = "12345678"
)
thirduser.save()
third_user = Profile(
    user = thirduser
)


third_user.save()

, он возвращает ошибку UNIQUE ...

Если я удаляю
third_user.save (), то это работает. Но когда я хочу присвоить его своему проекту как

project01 = Project(
    user = third_user,
    title = "prg01",
    description = "dsc01",
    category = cleaning,
    deadline = deadline,
    date_posted = date_posted,
    status = OPEN
)
project01.save()

, тогда возвращается еще одна ошибка:

save (), запрещенная для предотвращения потери данных из-за несохраненного связанного объекта 'user'. Примечание. Пользователь проекта должен быть из модели профиля, которая есть в моем коде. Модель профиля имеет поле с именем user, которое принадлежит пользователю (из django .contrib.auth.models import User)

Модели:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
    company = models.TextField(max_length=50, blank=True)
    phone_number = models.TextField(max_length=50, blank=True)
    country = models.TextField(max_length=50, blank=True)
    state = models.TextField(max_length=50, blank=True)
    city = models.TextField(max_length=50, blank=True)
    postal_code = models.TextField(max_length=50, blank=True)
    street_address = models.TextField(max_length=50, blank=True)
    categories = models.ManyToManyField('projects.ProjectCategory', related_name='competance_categories')
    def __str__(self):
        return self.user.username

@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
    instance.profile.save() # Saves the user profile

Модель проекта:

class Project(models.Model):
    user = models.ForeignKey(Profile, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    description = models.TextField(max_length=500)
    participants = models.ManyToManyField(Profile, related_name='project_participants')
    category = models.ForeignKey(ProjectCategory, on_delete=models.CASCADE, related_name='project_category')
    deadline = models.DateField(auto_now=False, auto_now_add=False,default=datetime.date.today, null=False)
    date_posted = models.DateField(editable=False, default=datetime.date.today)

    OPEN = 'o'
    INPROG = 'i'
    FINISHED = 'f'
    STATUS_CHOICES = (
        (OPEN, 'Open'),
        (INPROG, 'In progress'),
        (FINISHED, 'Finished'),
    )
    status = models.CharField(max_length=11, choices=STATUS_CHOICES, default=OPEN, )

    def __str__(self):
        return self.title
   def save(self, *args, **kwargs):
        if not self.id:
            self.date_posted = datetime.date.today()
        if self.deadline < datetime.date.today():
            raise ValidationError("The deadline cannot be in the past!",code=None)
        super(Project, self).save(*args, **kwargs)

Ошибка:

Traceback (most recent call last):
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\backends\sqlite3\base.py", line 298, in execute
    return Database.Cursor.execute(self, query, params)
sqlite3.IntegrityError: UNIQUE constraint failed: user_profile.user_id

Вышеуказанное исключение было прямой причиной следующего исключения:

Traceback (most recent call last):
  File "C:\Users\momen\group18\agreelance\projects\tests.py", line 115, in test_request_equals_project_user_user
    cc = Profile.objects.create(user=bb)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\query.py", line 413, in create
    obj.save(force_insert=True, using=self.db)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\base.py", line 717, in save
    self.save_base(using=using, force_insert=force_insert,
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\base.py", line 748, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\base.py", line 831, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\base.py", line 868, in _do_insert
    return manager._insert([self], fields=fields, return_id=update_pk,
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\query.py", line 1136, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\sql\compiler.py", line 1289, in execute_sql
    cursor.execute(sql, params)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\backends\utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\backends\utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\utils.py", line 89, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\momen\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\backends\sqlite3\base.py", line 298, in execute
    return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: UNIQUE constraint failed: user_profile.user_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...