尝试从其他模型中提取值时出现 Django ManyToManyField 错误

Django ManyToManyField error when trying to pull values from other models

我正在尝试使用纯 django 重新创建 Groupon,但遇到以下问题。这是我的以下想法

  1. 商户可以发起活动(具有唯一的活动 ID)
  2. 客户(拥有自己的唯一 ID)可以保存活动以供日后兑换

我创建了一个包含 3 列的模型(CampaignID、CustomerID 和一个默认值为 False 的布尔字段)

class Customer_save(models.Model):

    Customer_ID = models.ManyToManyField(Customer)
    Campaign_ID = models.ManyToManyField(Campaigns)
    Redeemed = models.BooleanField(default = False) #False denotes that it hasnt been redeemed yet

    def __str__(self):
        return self.Customer_ID.username,self.Campaign_ID.Campaign_desc

我正在尝试创建一个假行,想测试是否所有内容都正确输入 table。但我遇到了错误。你能告诉我哪里错了吗?

Campaign_ID = '10001'
Customer_ID = 'C12345'

    Customer_save.add(Customer_ID = Customer_ID,Campaign_ID = Campaign_ID)
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    AttributeError: type object 'Customer_wallet' has no attribute 'add'

>>> New = Customer_save(Customer_ID = Customer_ID, Campaign_ID `=Campaign_ID)`
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/kj/Desktop/projects/lib/python3.4/site-packages/django/db/models/base.py", line 480, in __init__
    raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])

>>> new = Customer_save.Customer_ID.create(Customer_ID = Customer_ID)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'ReverseManyRelatedObjectsDescriptor' object has no attribute 'create'
TypeError: 'Customer_ID' is an invalid keyword argument for this function

您需要先创建相关记录,然后再将它们分配给多对多字段:

customer = Customer(...)
customer.save()
campaign = Campaigns(...)
campaign.save()
customer_save = Customer_save(Redeemed=...)
customer_save.save()
customer_save.Customer_ID.add(customer)
customer_save.Campaign_ID.add(campaign)

有关 Django documentation: Many-to-many relationships 的更多信息。

PS。我建议您为您的字段和模型选择更好的名称并遵循 formal style guide。它们有点误导,而且通常这样的名称会导致混淆,不要介意其他人很难遵循您的代码。