Hi,
I am, as it will become painfully obvious, a new Django user. I am
converting a PHP site to Django. Right now, the main DB table in the
PHP site has around 100 columns and depending on the type of post
being saved, it may leave around 60 of those empty.

That's obviously an issue and I'd like to change it with this rewrite.
Problem I am having is figuring out how to break up the columns in a
way that makes sense, both from an app standpoint and from a Django
model perspective.

Right now, I have them in separated into 4 different tables, but even
within those 4 different tables/classes, some of the fields will be
unnecessary for certain types of posts.

I know this is a lot of info, but my first question is, how can I make
the field be required conditionally? That is, when I am creating a
post of Type A, maybe the "title" field is not required, but if I am
creating a post of Type B, maybe it is required. Should I move this
required/not required out of the model and into the controller?

For reference, below is one of the 4 classes I am defining. In this
instance only one of roadtrip_type, airport_type, commute_type, or
drive_type is required depending on which type of "Rideshare" you are
saving.

I've read through the docs on Models and about the DB-API but I am
still having trouble solving this stuff. Thanks in advance for your
time and thoughts.

/alex

class Rideshare(models.Model):
    title = models.CharField(max_length=150)
    slug = models.SlugField(prepopulate_from=("title",),max_length=30)
    from_city = models.CharField(max_length=150)
    from_state = models.USStateField()
    from_zip = models.IntegerField()
    to_city = models.CharField(max_length=150)
    to_state = models.USStateField()
    to_zip = models.IntegerField()
    depart_date = models.DateField()
    pickup_time = models.TimeField()
    ROADTRIP_TYPE_CHOICES = (
        ('PC', 'Personal Car'),
        ('RC', 'Rental Car'),
        ('VA', 'Van'),
        ('RV', 'RV'),
        ('BU', 'Bus'),
    )
    roadtrip_type = models.CharField(max_length=2,
choices=ROADTRIP_TYPE_CHOICES)
    COMMUTE_TYPE_CHOICES = (
        ('CP', 'Carpool'),
        ('VP', 'Vanpool'),
    )
    commute_type = models.CharField(max_length=2, choices=COMMUTE_TYPE_CHOICES)
    AIRPORT_TYPE_CHOICES = (
        ('TS', 'Taxishare'),
        ('SS', 'Shuttle Service'),
        ('TC', 'Town Car/Limo'),
        ('PC', 'Personal Car'),
        ('RC', 'Rental Car'),
    )
    airport_type = models.CharField(max_length=2, choices=AIRPORT_TYPE_CHOICES)
    "choose below","personal driver","messenger","errands","local delivery"
    DRIVE_TYPE_CHOICES = (
        ('PD', 'Personal Driver'),
        ('ME', 'Messenger'),
        ('ER', 'Errands'),
        ('LD', 'Local Delivery'),
    )
    drive_type = models.CharField(max_length=2, choices=DRIVE_TYPE_CHOICES)
    GENDER_CHOICES = (
        ('O', 'Male or Female'),
        ('M', 'Male'),
        ('F', 'Female'),
    )
    passenger_gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
    SMOKING_CHOICES = (
        ('O', 'Smoker or Non-Smoker'),
        ('N', 'Non-Smoker'),
        ('S', 'Smoker'),
    )
    passenger_smoking = models.CharField(max_length=1, choices=SMOKING_CHOICES)
    AGE_CHOICES = (
        ('0', 'Any Age'),
        ('1', '18-23'),
        ('2', '24-29'),
        ('3', '30-34'),
        ('4', '35-39'),
        ('5', '40-45'),
        ('6', '46-50'),
        ('7', '50-59'),
        ('8', '60+'),
    )
    passenger_age = models.CharField(max_length=1, choices=AGE_CHOICES)
    DAYS_CHOICES = (
        ('MF', 'Monday-Friday'),
        ('MO', 'Monday'),
        ('TU', 'Tuesday'),
        ('WE', 'Wednesday'),
        ('TH', 'Thursday'),
        ('FR', 'Friday'),
        ('SA', 'Saturday'),
        ('SU', 'Sunday'),
    )
    days_of_week = models.CharField(max_length=2, choices=DAYS_CHOICES)
    HOURS_CHOICES = (
        ('24', '24 Hours'),
        ('EM', 'Early Morning'),
        ('DT', 'Daytime'),
        ('AN', 'Afternoon'),
        ('EV', 'Evening'),
        ('LN', 'Late Night'),
    )
    hours_available = models.CharField(max_length=2, choices=HOURS_CHOICES)
    SEATS_CHOICES = (
        ('1', '1'),
        ('2', '2'),
        ('3', '3'),
        ('4', '4'),
        ('+', '4 or more'),
    )
    seats_available = models.CharField(max_length=1, choices=SEATS_CHOICES)
    leave_by = models.CharField(max_length=20)
    return_at = models.CharField(max_length=20)
    airport_name = models.CharField(max_length=100)
    rate = models.CharField(max_length=20)
    rate_per = models.CharField(max_length=10)
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    fromLat = models.CharField(max_length=20)
    fromLon = models.CharField(max_length=20)
    toLat = models.CharField(max_length=20)
    toLon = models.CharField(max_length=20)
    notes = models.TextField()
    VIEW_LEVEL_CHOICES = (
        ('PU', 'Public'),
        ('GR', 'Group Only'),
    )
    view_level = models.CharField(max_length=2, choices=VIEW_LEVEL_CHOICES)
    class Admin:
        # Admin options go here
        pass

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to