Karen Tracey wrote:
> On Jan 22, 2008 3:00 AM, Carl Karsten <[EMAIL PROTECTED]> wrote:
> 
>> # core/models.py
>> from django.db import models
>> from django.contrib.auth.models import User
>> import ridgemoor.msg.models
>> from time import strftime
>>
>> class Message(models.Model):
>>     to = models.ForeignKey(User, related_name = "messages_received")
>>     sender = models.ForeignKey(User, related_name = "messages_sent")
>>     subject = models.CharField(max_length=50, blank=False)
>>     sent = models.DateTimeField(auto_now_add=True)
>>     recieved = models.DateTimeField(null=True)
>>     body = models.TextField()
>>     status = models.CharField(max_length=1, blank=True, null=True)
>>     def __str__(self):
>>         return self.subject
>>     class Admin:
>>         list_display = ('sent', 'to', 'sender', 'subject')
>>
>>
>> [EMAIL PROTECTED]:~/ridgemoor$ PYTHONPATH=$HOME ./manage.py syncdb
>> Error: One or more models did not validate:
>> core.message: Accessor for field 'to' clashes with related field
>> 'User.messages_received'. Add a related_name argument to the definition
>> for 'to'.
>>
>> Something broke my app.  it is most likely the changes I have been making
>> to get
>> things working under apache, but this may be a change to trunk.
>>
>> It is telling me to add something that is already there.
> 
> 
> The error is telling you that by the time the "to" field of Message is
> processed, User already has a "messages_received" relation.  Yes, the
> message is a bit misleading, since you already have a related_name field,
> but what it really means is you need to specify a related_name that doesn't
> already exist for User.  What is in ridgemoor.msg.models?  I'd guess there's
> another model with a ForeignKey to User specifying a related_name of
> "messages_received".  Do you really need two models with this relation?  If
> so you'll need to specify different related_names for the two.
> 

Ah!   bingo.  fixed.

in answer to your question:
# msg/model.py
class Message(models.Model):
     to = models.ForeignKey(User, related_name = "messages_received")
     sender = models.ForeignKey(User, related_name = "messages_sent")

and for the last 6 months I had been using:
class Message(msg.models.Model):
     status = models.CharField(max_length=1, blank=True, null=True)

and in at least one:
     # class Meta:
     #    db_table = 'message'

I did this before I learned you shouldn't do it. It worked, might still work, 
but when I started bumping into problems I figured I better flatten it out.  So 
I cut/pasted the attributes, changed the parent class to models.Model, and 
figured that would be all I needed.  Didn't occur to me that relations create 
keys in other tables - now I see the copies are colliding.

Thanks for helping me.

Carl K





--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to