gpt4 book ai didi

python - Django 模型 self._meta.get_all_field_names() 返回的字段不在我的模型中?

转载 作者:行者123 更新时间:2023-11-28 22:45:27 26 4
gpt4 key购买 nike

出于某种原因,当我运行 self._meta.get_all_field_names() 时,我得到了这个输出:

['account_created', 'email', 'first_name', u'id', 'last_active',
'last_name', 'password', 'song', 'username']

如您所见,我的类中没有“歌曲”字段(但我有另一个名为“歌曲”的模型)。这可能是错误还是我做错了什么?

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)

最佳答案

您的 song 类有一个指向 user 的外键 submitted_by,所以有一个 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 已经正式化,因此像这样的内省(introspection)模型应该更直接。

关于python - Django 模型 self._meta.get_all_field_names() 返回的字段不在我的模型中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28609300/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com