出于某种原因,当我运行self._meta.get_all_field_names()
时,我得到了这个输出:
['account_created', 'email', 'first_name', u'id', 'last_active',
'last_name', 'password', 'song', 'username']
正如你所看到的,没有"歌曲"我班上的字段(但我有另一个名为&#34的模型;歌曲")。这可能是一个错误,还是我做错了什么?
class user(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
username = models.CharField(max_length=50)
password = models.CharField(max_length=50)
email = models.EmailField()
account_created = models.DateTimeField(null=True,blank=True)
last_active = models.DateTimeField(null=True,blank=True)
def __unicode__(self):
# return "{} {} {} {} {} {} {}".format(self.first_name,self.last_name,self.username, self.password,self.email, self.account_created,self.last_active)
return ",".join(["{}:{} ".format(i,getattr(self,i)) for i in self._meta.get_all_field_names() if i != "song"])
这是我的歌曲"如果有任何帮助,请上课:
class song(models.Model):
title = models.CharField(max_length = 128)
artist = models.CharField(max_length = 30)
submitted_by = models.ForeignKey(user,null=True,blank=True)
filename = models.CharField(max_length = 256)
filesize = models.BigIntegerField()
def __unicode__(self):
return "{} by {}".format(self.title,self.artist)
答案 0 :(得分:4)
您的song
班级的外键submitted_by
指向user
,因此从user
到song
有一个reverse relationship。
在Django 1.7及更早版本中,您可以尝试使用self._meta.local_fields
:
[x.name for x in self._meta.local_fields]
这会忽略很多很多字段(你不会在user
模型上有任何字段),你可以得到它们:
[x.name for x in self._meta.local_many_to_many]
在即将推出的Django 1.8中,Model._meta
API已经正式化,因此对这样的内省模型应该更直接。