I have a simple userprofile class in django such that
class Profile(models.Model):
user = models.OneToOneField(User,unique=True)
gender = models.IntegerField(blank=True, default=0, choices=UserGender.USER_GENDER,db_column='usr_gender')
education = models.IntegerField(blank=True, default=0, choices=UserEducation.USER_EDU,db_column='usr_education')
mail_preference = models.IntegerField(blank=True, default=1, choices=UserMailPreference.USER_MAIL_PREF,db_column='usr_mail_preference')
birthyear = models.IntegerField(blank=True, default=0,db_column='usr_birthyear')
createdate = models.DateTimeField(default=datetime.datetime.now)
updatedate = models.DateTimeField(default=datetime.datetime.now)
deletedate = models.DateTimeField(blank=True,null=True)
updatedBy = models.ForeignKey(User,unique=False,null=True, related_name='%(class)s_user_update')
deleteBy = models.ForeignKey(User,unique=False,null=True, related_name='%(class)s_user_delete')
activation_key = models.CharField(max_length=40)
key_expires = models.DateTimeField()
You can see that deletedBy and updatedBy are foreign key fields to user class. If I don’t write related_name='%(class)s_user_update' it gives me error (I don’t know why).
Although this works without any error, it doesn’t push the user id’s of deletedBy and updatedBy fields although I assign proper user to them.
Could give me any idea and explain the related_name='%(class)s_user_update' part ?
Thanks
'%(class)s_user_update'implies that it is a string awaiting formatting. You would normally see it in the context:Which would become:
You can read more about python string formatting in the python docs. String Formatting Operations
I can’t see how the code you have would ever work: perhaps you want:
If it does work, it is because django is doing some fancy magic behind the scenes, and replacing
'%(class)s'by the class name of the current class.Notes on the above:
models.pyfile. It is one less import you’ll need to worry about, especially if you don’t use theUserclass anywhere in yourmodels.pyfile.