I have a code like this inside tests.py:
thirduser = User(
username = "thirduser",
password = "12345678"
)
thirduser.save()
third_user = Profile(
user = thirduser
)
third_user.save()
it returns the error of UNIQUE...
If I remove
third_user.save() it works. But when I want to assign it to my project as
project01 = Project(
user = third_user,
title = "prg01",
description = "dsc01",
category = cleaning,
deadline = deadline,
date_posted = date_posted,
status = OPEN
)
project01.save()
Then it returns another error of
save() prohibited to prevent data loss due to unsaved related object 'user'. Note: The user for project should be from Profile model that I have in my code. and Profile model has a field named user which is from User (from django.contrib.auth.models import User)
Models:
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
Project Model:
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)
Aucun commentaire:
Enregistrer un commentaire