Python 按用户外键搜索类

Python 按用户外键搜索类,python,mysql,django,Python,Mysql,Django,我到处寻找,甚至在两者之间,由于某种原因,我找不到一个明确的答案 我使用的是django1.9,并创建了此模型: class paymentInfo(models.Model): """ Model for storing payment info - Username as ForeignKey from userToCard - Store payment token - Store last 4 - Store card/bank name

我到处寻找,甚至在两者之间,由于某种原因,我找不到一个明确的答案

我使用的是
django1.9
,并创建了此模型:

class paymentInfo(models.Model):
    """
    Model for storing payment info
    - Username as ForeignKey from userToCard
    - Store payment token
    - Store last 4
    - Store card/bank name
    - Store bool value for Default method
    """

    username = models.ForeignKey(User, db_column='username', on_delete=models.CASCADE)
    token = models.CharField(max_length=10)
    last_4 = models.IntegerField()
    bank_name = models.CharField(max_length=50)
    default = models.BooleanField(default=0)

    class Meta:  # meta class to define the table name
        db_table = 'payment_methods'
        verbose_name_plural = 'Payment Methods'  # for the admin site display
        ordering = ('username',)

    def __str__(self):
        # in __str__  you should return a value of type string
        # so self.username changed to self.username.username          
        return self.username.username  # value displayed in admin view
我已经使用一些不同的用户名创建了一些对象,并希望按用户筛选paymentInfo对象

当我存储对象时,数据库将
用户主键
存储在
用户名
列下,而不是实际的用户名字符串。我不知道为什么,但这不是我的问题

我的问题是当我试图使用
用户名
用户主键
过滤出
paymentInfo.objects时。我似乎无法将其过滤掉,因此通常会出现以下错误:
FieldError:无法将关键字“username”解析到字段中。选项包括:银行名称、默认值、id、姓氏4、令牌


另外,我使用的是MySQL

如果我没弄错的话,您正在尝试按用户名从表用户中筛选数据,这是一个外键。在这种情况下,这应该会有所帮助


paymentInfo.objects.filter(username\uu name='John')

多亏了提供的答案,我才能够找到解决方案(主要使用@Aamir Adnan的方法)

我的类中新的
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

TypeError: coercing to Unicode: need string or buffer, User found

您是否运行了
makemigrations
migrate
ForeignKey
存储链接模型的id,如果
ForeignKey
关系的字段/db_列名为
username
,这并不意味着它将神奇地开始在数据库中存储用户名。更好的方法是使用模型的名称作为字段名,例如
user=models.ForeignKey(user)
。谢谢你的提示,阿米尔。我会继续做那个改变。至于迁移,是的。我到底要怎么搜索?“pk”是“21”,因此我尝试了各种搜索方法进行筛选,也就是当我收到上面的错误时。根据文档,不需要使用
db_列
关键字参数:
用于此字段的数据库列的名称。如果没有给出,Django将使用该字段的名称。
来源:谢谢pixeld,这是我从其他答案中得到的。将删除:)当我回到电脑上时,我将尝试此操作。但问题是,当我尝试使用“用户名”作为关键字时,我会收到上面发布的错误“无法解析关键字用户名”。您需要使用用户名作为关键字,因为它跨越了FK关系。这是来自文档的感谢kyle&AndMar的快速回复。我们将尽快查看这些建议!因此,这不起作用,因为我继续收到错误的
无法解析关键字username
TypeError: coercing to Unicode: need string or buffer, User found