我在django中有一个简单的userprofile类,以便
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()
您可以看到deletedBy
和updatedBy
是用户类的外键字段。如果我不写related_name='%(class)s_user_update'
它会给我错误(我不知道为什么)。
虽然这没有任何错误,但它不会推送deletedBy
和updatedBy
字段的用户ID,但我会为其分配适当的用户。
可以给我任何想法并解释related_name='%(class)s_user_update'
部分吗?
由于
答案 0 :(得分:1)
'%(class)s_user_update'
表示它是一个等待格式化的字符串。您通常会在上下文中看到它:
'%(foo)s other' % {'foo': 'BARGH'}
哪个会成为:
'BARGH other'
您可以在python文档中阅读有关python字符串格式的更多信息。 String Formatting Operations
我看不出你的代码会如何工作:也许你想要:
class Profile(models.Model):
# other attributes here
updated_by = models.ForeignKey('auth.User', null=True, related_name='profile_user_update')
deleted_by = models.ForeignKey('auth.User', null=True, related_name='profile_user_deleted')
# other attributes here
如果确实有效,那是因为django在幕后做了一些奇特的魔术,并用当前类的类名替换'%(class)s'
。
以上注释:
models.py
文件。如果您不在User
文件中的任何位置使用models.py
类,那么您需要担心的重要性较低。答案 1 :(得分:0)
您可以在此处阅读有关related_name内容的更多信息:
https://docs.djangoproject.com/en/1.3/topics/db/queries/#following-relationships-backward