2015-07-06 2 views
0

Я пытаюсь воссоздать Groupon с использованием чисто django и иметь проблемы с ниже. Это моя ниже идеяОшибка Django ManyToManyField при попытке вытащить значения из других моделей

  1. Торговец может начать кампанию (которая имеет уникальный CAMPAIGNID)
  2. потребителя (который имеет свой собственный уникальный идентификатор) может сохранить кампанию, чтобы быть погашен позже

Я создал модель с 3-мя столбцами (CAMPAIGNID, CUSTOMERID и BooleanField со значением по умолчанию 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 

Я пытаюсь создать фальшивку строку желающему проверить, если все правильно получает питание в таблицу. Но я сталкиваюсь с ошибками. Не могли бы вы рассказать мне, где я ошибаюсь?

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 
+0

, пожалуйста, прочтите [это] (https://docs.djangoproject.com/en/1.8/topics/db/examples/many_to_many/) – Pynchia

+0

Спасибо .. имеет смысл – Kannaj

ответ

0

Вам нужно создать соответствующие записи перед назначением их на многие-ко-многим поле:

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. Они немного вводят в заблуждение, и часто такие имена приводят к путанице, неважно, что другим трудно следовать вашему коду.

Смежные вопросы