ManytoManyField未返回str obj

2024-04-25 12:23:04 发布

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

我有以下两种型号。在

class Customer(models.Model):
    Customer = models.OneToOneField(User)
    CustomerID = models.CharField(max_length = 15)


    def __str__(self):
        return self.Customer.username


class Customer_Coupons(models.Model):

    Customer_Det = models.ManyToManyField(Customer)
    Campaign_Det = models.ManyToManyField(Campaigns)
    Redeemed = models.BooleanField(default = False)

    def Get_Customer_ID(self):
        return '\n'.join([p.CustomerID for p in self.Customer_Det.all()])

    def Get_Campaign_ID(self):
        return '\n'.join([p.CampaignID for p in self.Campaign_Det.all()])

    def __str__(self):
        return self.Customer_Det.CustomerID

我对客户钱包的str方法有问题。我在查询时似乎得到了下面的错误。有没有更好的方法来定义str方法?我更希望有一个CustomerID或Customer name,它再次存储在User表中。在

^{pr2}$

Tags: 方法selfgetmodelreturnmodelsdefcustomer
1条回答
网友
1楼 · 发布于 2024-04-25 12:23:04

您的Customer_Coupons.Customer_Det字段是ManyToManyField,因此self.Customer_Det不表示单个值。在

您可能需要遍历self.Customer_Det中所有可能的Customer.CustomerID,以构建返回字符串。或者只使用你遇到的第一个,或者任何适合你需要的东西。在

尝试:

return ' / '.join(cust.CustomerID for cust in self.Customer_Det.all())

根据您的需要,将all更改为filterget。在


编辑

从评论中可以看出,您希望您的Customer_Coupons模型每次都有与1个客户和1个活动相关的每个实例。在本例中,对它们都使用ForeingKey字段,而不是ManyToManyField。 您将能够以您在问题中尝试的方式访问相关的对象字段(即self.Customer_Det.CustomerID)。在

如果您需要在以下两种情况下使用优惠券:

  • 用户可以有多张优惠券
  • 优惠券可以属于多个用户。在

{cd9>的实例不希望与客户关联。竞选活动也是如此。在

相关问题 更多 >