2012-01-26 1 views
0

Я изменил код регистрации django. Я вставляю данные в UserProfile и Business во время регистрации. Данные сохраняются в UserProfile Модель.Экземпляр «Бизнес» должен иметь значение первичного ключа, прежде чем использовать отношения «многие ко многим»

#TODO: saving contact and address field data into UserProfile 
user_profile = new_user.get_profile() 
user_profile.user = new_user 
user_profile.contact, user_profile.address = contact, kwargs['address'] 
user_profile.save() 

Следующий код не работает. Получение этой ошибки. 'Business' instance needs to have a primary key value before a many-to-many relationship can be used.

#TODO: saving business field data into Business Model 
user_business = Business() 
user_business.owner = new_user 
user_business.name = business 
user_business.save() 

благодаря UPDATE

class Business(models.Model): 
name = models.CharField(max_length=100) 
slug = models.SlugField(max_length=100) 
owner = models.ManyToManyField(User) 
created = models.DateTimeField(editable=False, default=datetime.now) 
modified = models.DateTimeField(editable=False, default=datetime.now) 

class Meta: 
    ordering = ['name'] 

def save(self): 
    self.modified = datetime.now() 
    if not self.slug: 
     self.slug = slugify(self.name, instance=self) 
    super(Business, self).save() 
+0

Не могли бы вы показать структуру модели. –

+0

Существует проблема с обычным методом сохранения, я думаю. Но я не уверен (все еще расследую). Вы можете просто попробовать удалить его и запустить свой код. –

+0

Какие сигналы вызывают «бизнес»? Пожалуйста, разместите все и все. –

ответ

1

Попробуйте обновить свой собственный код:

def save(self, *args, **kwargs): 
    self.modified = datetime.now() 
    if not self.slug: 
     self.slug = slugify(self.name) 
    super(Business, self).save(*args, **kwargs) 

UPDATE

@no_access Я думаю, re является проблемой в процессе назначения экземпляра User на ManyToManyField в Business. Я подозреваю, что поле ManyToManyField не получает ссылку на созданный экземпляр User. Таблица intermediate поля ManyToManyField нуждается в соответствующем объекте User. Итак, я думаю, что здесь лежит проблема.

+0

Нет проблем с пользовательским методом сохранения. Я тоже попробовал ваш метод. Но не повезло. – Kulbir

+1

@no_access, который, возможно, не устранил вашу проблему здесь, но вы * должны * переопределить 'save' таким образом (то есть с' * args' и '** kwargs'). В противном случае вы разбьете кучу других вещей в Django, который вызывает сохранение ваших моделей (в частности, admin). –

+0

@no_access Во-первых, вы написали собственный код для slugify? Если вы использовали значение по умолчанию, вам не нужно указывать на него 'instance = self'. Во-вторых, вам не нужно размещать инструкцию 'self.modified = datetime.now()' после изменений модели в соответствии с комментарием 'Chris Pratt' в вопросе. Наконец, это полный код, который связан с моделью «Бизнес»? –

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