2015-05-28 2 views
1

У меня есть эта модель в Django, где person имеет такую ​​же информацию от user предоставленную Django плюс немного больше информации. Когда я создаю новый person, ему также необходимо создать новый user, это нормально. Но когда я удаляю person, user все еще остается в моей базе данных. Что мне здесь не хватает? Я также хотел бы удалить user.Как выполнить CASCADE при удалении?

class Person(models.Model): 
    user = OneToOneField(User) 
    gender = CharField(max_length=1, choices=GenderChoices, blank=True, null=True) 
    birth_date = DateField(blank=True, null=True) 

    def __unicode__(self): 
     return self.user.username 
+0

Что делает инструкция SQL 'CASCADE'? Я нашел соответствующую документацию о ее использовании в Django: https://docs.djangoproject.com/en/1.8/ref/models/fields/#django.db.models.ForeignKey.on_delete – SebasSBM

ответ

0

Попробуйте override the delete method на модели (код не тестировался):

class Person(models.Model): 
    user = OneToOneField(User) 
    gender = CharField(max_length=1, choices=GenderChoices, blank=True, null=True) 
    birth_date = DateField(blank=True, null=True) 

    def __unicode__(self): 
     return self.user.username 

    def delete(): 
     theuser = User.objects.get(id=user) 
     theuser.delete() 

Я нашел соответствующую документацию об использовании CASCADE в Django here.

+0

Спасибо за ваш ответ Sebas, но я думаю, что если я переопределю метод удаления, я могу найти некоторые проблемы с массовыми операциями: http://stackoverflow.com/a/16621653/523168 –

+0

Возможно, вы можете использовать сигналы 'pre_delete' и' post_delete' для создания события, которые справляются с этой проблемой должным образом ... Я еще не играл с сигналами. – SebasSBM

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