按用户外键搜索类

2024-10-02 02:31:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我正在使用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对象

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

我的问题是当我试图使用usernameuser pk筛选出paymentInfo.objects时。我似乎无法过滤掉它,因此我通常得到的错误是:FieldError: Cannot resolve keyword 'username' into field. Choices are: bank_name, default, id, last_4, token

另外,我正在使用MySQL


Tags: 对象storenameselftokendefaultforvalue
2条回答

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

paymentInfo.objects.filter(username__name='John')

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

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
"""

user = models.ForeignKey(User, 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 = ('user',)

def __str__(self):
    return self.user  # value displayed in admin view

def __unicode__(self):
    return '%s' % (self.user)

我的类中新的__unicode__被删除,因此我不再收到此错误:

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

相关问题 更多 >

    热门问题