psycopg2.errors.StringDataRightTruncation: value too long for type character varying(100)

22 views Asked by At

models.py

import uuid
from django.db import models
from django.contrib.auth.models import User
from cloudinary_storage.storage import MediaCloudinaryStorage
from core.utlis import random_id

class Profile(models.Model):
profile_id = models.AutoField(primary_key=True, default=random_id, editable=False)
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField(blank=True)
phone_number = models.CharField(max_length=20)  
address = models.CharField(max_length=255)  
dob = models.DateField(auto_now_add=True)
pet_info = models.ManyToManyField('Pet', blank=True)
followers = models.ManyToManyField(User, related_name='following', blank=True)
following = models.ManyToManyField(User, related_name='followers', blank=True)
photo = models.ImageField(upload_to='profile_photos/', blank=True, null=True)
cover_photo = models.ImageField(
upload_to='profile_covers/',
blank=True,
null=True,
storage=MediaCloudinaryStorage()
)
def __str__(self):
return self.user.username

class Pet(models.Model):
id = models.AutoField(primary_key=True, default=random_id, editable=False)
name = models.CharField(max_length=255)
species = models.CharField(max_length=255)  
breed = models.CharField(max_length=255)
age = models.PositiveIntegerField()
owner = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='pets')
petphoto = models.ImageField(upload_to='pet_photos/', blank=True, null=True)

    def __str__(self):
        return self.name+ " owned by "+ self.owner.user.username

seed_profiles.py


import random
from django_seed import Seed
from django.core.management.base import BaseCommand
from django.core.files import File
from faker import Faker
from core.models import \*
from core.utlis import get_media_paths_for_directory
import pandas as pd

fake = Faker()

# Generates breed list

csv_file_path = r'F:\\Projects\\Pet_App\\backend\\ml_model\\data\\breed_list.csv'
df = pd.read_csv(csv_file_path)
breed_list = df\['breed'\].tolist()

# Generates photos paths list

photo_directory = 'profile_photos'
profile_photo_paths = get_media_paths_for_directory(photo_directory)
profile_photo_queue = list(profile_photo_paths)  # Create a queue to manage profile photo choices

photo_directory = 'Pet'
pet_photo_paths = get_media_paths_for_directory(photo_directory)
pet_photo_queue = list(pet_photo_paths)  # Create a queue to manage pet photo choices

class Command(BaseCommand):
help = 'Seed the database with sample profiles and associated pets'

    def handle(self, *args, **kwargs):
        seeder = Seed.seeder()
    
        # Assuming you have already seeded users using the 'seed_users' command
        users = User.objects.all()
    
        for user in users:
            if profile_photo_queue:
                profile_photo_path = profile_photo_queue.pop(random.randint(0, len(profile_photo_queue) - 1))
    
                with open(profile_photo_path, 'rb') as photo_file:
                    profile_photo = File(photo_file)
    
                profile = Profile.objects.create(
                    user=user,
                    bio=fake.text(),
                    phone_number=fake.phone_number(),
                    address=fake.address(),
                    dob=fake.date_of_birth(),
                    photo=profile_photo
                )
    
                for _ in range(2):
                    pet_name = fake.first_name()
                    breed = random.choice(breed_list)
                    age = random.randint(1, 5)
    
                    if pet_photo_queue:
                        pet_photo_path = pet_photo_queue.pop(random.randint(0, len(pet_photo_queue) - 1))
    
                        with open(pet_photo_path, 'rb') as pet_photo_file:
                            pet_photo = File(pet_photo_file)
    
                        pet = Pet.objects.create(
                            name=pet_name,
                            species=fake.word(),
                            breed=breed,
                            age=age,
                            owner=profile,
                            petphoto=pet_photo
                        )
    
                        self.stdout.write(self.style.SUCCESS(
                            f"Pet '{pet_name}' with breed '{breed}' created for user '{user.username}'."))
                        
                self.stdout.write(self.style.SUCCESS(f"Profile created for user '{user.username}'."))
    
        self.stdout.write(self.style.SUCCESS('Profiles and pets created successfully.'))

This is the code that is generating the title as error i cannot under exactly what it means.

I am trying to generate a fake database using faker library.

This is the exact error: .venv) PS F:\Projects\Pet_App\backend> python manage.py seed_profiles Traceback (most recent call last): File "F:\Projects\Pet_App.venv\Lib\site-packages\django\db\backends\utils.py", line 89, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ psycopg2.errors.StringDataRightTruncation: value too long for type character varying(100)

       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

django.db.utils.DataError: value too long for type character varying(100)

0

There are 0 answers