Hi Tim,

Thanks for reply. I mean if I want Samurai to be out of all rooms? ForeignKey disallows Null. Should I do like this: Create a default dummy Room and assign it by default?

Viet.

Timothy Kinney wrote:
I don't understand your question. The Samurai requires one room by the declaration:

class Samurai(models.Model):
...
room = models.ForeignKey("Room")
...

Since it is a ForeignKey, it can only accept one value and the value cannot be None. Therefore, all samurai will always be in only one room at a time.

Hope this helps.

-Tim

On Fri, Feb 19, 2010 at 12:45 AM, Le Quoc Viet <viet.aikid...@gmail.com <mailto:viet.aikid...@gmail.com>> wrote:

    Thanks for explanation. What if Samurai can be outside all Rooms
    and can be at most at 1 Room at a time?

    Regards,
    Viet.



    Peter Herndon wrote:
    On Feb 18, 2010, at 11:47 PM, Timothy Kinney wrote:

    Here's the system I'm currently using that doesn't work too well...

    Samurai (id, name)

    Room (id, name, ForeignKey(Samurai), ForeignKey(Province))

    Province (id, name)


    Can someone suggest which relationships to use to get the results that
    I want and explain why the relationship helps to accomplish that?

    If a given samurai must be in a room, and a room can hold multiple samurai, 
your models should instead be:

    Samurai (id, name, ForeignKey(Room))

    Room (id, name, ForeignKey(Province))

    Province (id, name)

    With this set of models, a single Samurai has an FK reference to the room in which he finds himself.  The 
Room, very similarly, has a reference to the Province in which it is located.  A Province can hold many 
Rooms, and a Room can hold many Samurai.  In Django's ORM models, a given instance of the Room model (e.g., 
"room = Room.objects.get(pk=1)") will have a method that allows access to all Samurais residing in 
that Room.  So, "room.samurai_set" will give you the Room's Samurais.  Similarly, for a given 
province, you can retrieve all rooms via "province.room_set".  Relevant Django docs are here:  
http://docs.djangoproject.com/en/1.1/ref/models/relations/#ref-models-relations

    In a view, assuming you are given a Samurai, you can get to the room name via 
samurai.room.name <http://samurai.room.name>, and the province name by 
samurai.room.province.name <http://samurai.room.province.name>.  If, in your view, 
you pass the Samurai object to the template, your template can perform that same 
dereference and thus you can present to the user the room name and province name in your 
HTML.  Relevant Django docs here:  
http://docs.djangoproject.com/en/1.1/topics/templates/#variables

    For the canonical book on relational database theory, I'd suggest "Introduction 
to Database Systems", by Chris Date.  Not for the faint of heart, the 
math-challenged, the practical or those short of time, but it will explain relational 
theory in detail.  Great detail.  Ye be warned.  ;)

    I hope this helps, though the Date book probably won't, at least not 
without long and sustained study.  There are likely other books on RDBMSs that 
folks can recommend.  Other than that, my apologies, it's late and I no longer 
have a functioning brain.

    ---Peter Herndon


-- 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
    <mailto:django-users@googlegroups.com>.
    To unsubscribe from this group, send email to
    django-users+unsubscr...@googlegroups.com
    <mailto:django-users%2bunsubscr...@googlegroups.com>.
    For more options, visit this group at
    http://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-us...@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://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-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to