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)