2013-06-03 83 views
0

我延長Django的用戶模式,包括一個外鍵指向像這樣(就像它在Django docs說)另一種模式:在Django製作外鍵的用戶模型擴展所需

models.py:

class Ward(models.Model): 
    name = models.CharField(max_length=100) 

    def __unicode__(self): 
     return self.name 

# Extending the user model 
class WardMember(models.Model): 
    user = models.OneToOneField(User) 
    ward = models.ForeignKey(Ward) 

    def __unicode__(self): 
     return self.ward.name 

admin.py:

class WardMemberInline(admin.StackedInline): 
    model = WardMember 
    can_delete = False 
    verbose_name_plural = 'ward member' 

# Define a new User admin 
class UserAdmin(UserAdmin): 
    inlines = (WardMemberInline,) 

admin.site.register(Ward) 

# Re-register UserAdmin to get WardMember customizations 
admin.site.unregister(User) 
admin.site.register(User, UserAdmin) 

當我創建在管理界面我想需要這個新WardMember.ward擴展新的用戶。目前它沒有強制執行。這裏是發生了什麼:

  1. 創建用戶成功,沒有一個病房
  2. 創建其他記錄用戶成功
  3. 編輯用戶現在不會讓我保存,除非有選擇

我一個病房我真的很喜歡上面的#1失敗。

我試着弄清楚如何使用代理對象替代save()代替User但這不起作用。我看着pre_save信號,但文件明確表示這不是用來否決保存。

什麼是正確的方法?

其他信息:

  • 我使用的是1.4。我看到在1.5我可以extend the user class,但我還沒有能夠更新到1.5。

我結束了Django的1.5開拓進取,但我會離開這個位置,以防有人有一個最終的答案能夠貢獻1.4工作。

+0

你爲什麼不擴大'User'示範基地,並添加一個外鍵招架?這可能會。 –

+0

我看到我可以用Django 1.5來做到這一點,但我在1.4上。也許我會考慮遷移,但我只有這個小東西來解決。 (更新問題以包含相關信息) – devguydavid

回答

0

在Django 1.3.1我用這個代碼,並能正常工作:

from django.contrib.auth.models import User 

class FilterSearchQueries(models.Model): 
    title = models.CharField(max_length=250) 
    owner = models.ForeignKey(User) 
    place = models.CharField(max_length=250) 
    query = models.TextField()