Monday, November 29, 2010

Re: Django - Alternative to using NULLs? (for integer and FK fields).

heya,

Phone Number - Yup, you're both right, I'll be using CharField now,
and model validation to make sure they're digits.

Spouse/Children:

With children, a M2M field, there's a link table, and if you don't
have a spouse, then there won't be any lines in that table. So no need
for NULLs there. I've just tested it with just blank=True, and no
null=True - seems to do what I want (optional children).

With ForeignKeyField though, I thought this was simply an FK field,
with the ID number of the object we're relating/pointing stored in
that field? Isn't that how it works in a normal DB? Why is there a
separate Person_spouse table?

Is there any way to make this optional without using NULLs, or should
I make it a m2m field? (I suppose in theory you can have multiple
spouses...well, not under my jurisdiction, I guess...lol).

Cheers,
Victor

On Nov 30, 3:11 pm, Lachlan Musicman <data...@gmail.com> wrote:
> On Tue, Nov 30, 2010 at 12:28, Victor Hooi <victorh...@gmail.com> wrote:
> > Hi,
>
> > I'm wondering what the community's stance on using NULL in Django is?
>
> > Say for example you have:
>
> >    class Person(models.Model):
> >        street_address = models.CharField(max_length=50, blank=True)
> >        suburb = models.CharField(max_length=30)
> >        postcode = models.IntegerField()
> >        state = models.CharField(max_length=3)
> >        email = models.EmailField()
> >        mobile_phone_number = models.IntegerField(max_length=12)
> >        home_phone_number = models.IntegerField(max_length=10,
> > null=True, blank=True)
> >        work_phone_number = models.IntegerField(max_length=8,
> > null=True, blank=True)
>
> >       spouse = models.ForeignKey('self', null=True, blank=True)
> >       children = models.ManyToManyField('self', null=True,
> > blank=True)
>
> > For string fields like street_address, I can make these "blank=True",
> > and Django will store an empty string if the user leaves it blank.
>
> > However, for integer fields like home_phone_number and
> > work_phone_number, I've had to make these "null=True" for the case
> > where somebody doesn't supply them (i.e. they're meant to be optional,
> > mobile is required).
>
> > However, is there a better way of handling this case? (assuming I want
> > to keep these fields as integers).
>
> Is it possible to know why you would want to keep them as integers?
> Given that there are no mathematical functions that you would want to
> apply to them....
>
> > What about in the case of optional foreign keys (spouse and children)
> > - is there a better way of handling these, without using NULLs?
>
> As I understand it, foreign keys are kept in the db as follows:
>
> 1. table_Person
> 2. table_Person_children
> 3. table_Person_spouse
>
> table 2 has three columns: id, Person, Children
> table 3 has three columns: id, Person, Spouse
>
> or something to that effect.
>
> Therefore, if there is no Spouse or Child, there is no entry for
> Person in tables 2 or 3.
>
>
>
>
>
>
>
> > Cheers,
> > Victor
>
> > --
> > You received this message because you are subscribed to the Google Groups "Django users" group.
> > To post to this group, send email to django-users@googlegroups.com.
> > To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
> > For more options, visit this group athttp://groups.google.com/group/django-users?hl=en.

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

No comments:

Post a Comment