2011-07-11 138 views
1

我有一個叫Personnel模型我使用作爲User模型的輪廓模型,該模型。在我的網站管理員可以創建和他們自己的賬戶,但所有的個人資料欄應填寫。這裏是我的模型管理用戶配置文件創建和刪除用戶和配置文件

class Personnel(models.Model): 
    """ 
    Model for storing the personnel information 
    """ 
    user = models.OneToOneField(
     User 
    ) 
    phone = models.CharField(
     null=False, max_length=50, verbose_name="Phone" 
    ) 
    address = models.CharField(
     null=True, max_length=500, verbose_name="Address" 
    ) 

我需要實現以下。

Personnel模型中的create方法,以便當有人調用方法Personnel.objects.create(username, email, phone, address),它會在User模型的新用戶,並存儲在Personnel模型中的配置文件字段。我需要一個形式,這個處理請求,但是這種形式應該驗證Personnel模型兩個領域和User模型。

Personnel模型的delete方法,以便當有人調用方法Personnel.objects.delete(username),則刪除從Personnel模型和從模型User用戶的配置文件。我不認爲我需要一個表格。

誰能告訴我該怎麼做表格位和經理位。這是我到目前爲止有:

形式:

經理:

from django.db import models 
from django.contrib.auth.models import User 

class Personnel(models.Manager): 
    """ 
    This is the manager for the Personnel model. It contains the logic for 
    creating a new personnel which also creates a new User. 
    """ 
    def create(self, username, email, phone, address): 
     """ 
     Creates a new personnel 
     """ 
     pass 

    def delete(self, username): 
     """ 
     Deletes a personnel 
     """ 
     super(Personnel, self).delete() 

非常感謝。

回答

1
class PersonnelManager(models.Manager): 
    def create(self, username, email, phone, address, **kwargs): 
     user = User.objects.get_or_create(username=username, email=email) 
     return super(PersonnelManager, self).create(user=user, phone=phone, address=address, **kwargs) 

class Personnel(models.Model): 
    ... 
    objects = PersonnelManager() 

刪除應該照顧自己通過級聯。

+0

嗨克里斯。感謝您的回答。你能告訴我怎麼去表格嗎?我希望有一個通用的表單來驗證我的'Personnel'模式和'User'模型。用戶表單位於'django.contrib.auth.forms.UserCreationForm'。我是否需要將代碼複製粘貼到我的自定義表單中? –

1

這可能是更容易的方法添加到Personnel.save()Personnel.delete()做這項工作。

https://docs.djangoproject.com/en/1.3/topics/db/models/#overriding-model-methods

的Personnel.save()由Django的調用,並且可以創建一個丟失的用戶和配置。

「凌駕刪除」側邊欄可能不相關,這取決於你的應用程序。批量刪除非常少見,而且容易進行批量後刪除清理。或者單獨刪除而不是批量刪除。

相關問題