2011-10-31 66 views
0

我想用戶模型具有以下擴展用戶配置擴展:如何將用戶模型,其中包括一個一對多的關係與另一個模型

class Client(models.Model): 
    business_name = models.CharField(max_length=128) 
    category = models.ForeignKey(Category) # the beginning of the problem 
    user = models.ForeignKey(User, unique=True) 

class Category(models.Model): 
    category = models.CharField(max_length=75) 

#the problem is here 
def create_client_profile(sender, instance, created, **kwargs): 
    if created: 
     Client.objects.create(user=instance) 

post_save.connect(create_client_profile, sender=User) 

所以,當我嘗試同步數據庫,它抱怨category_id不能爲空,問題的根源是「create_client_profile」。我該如何解決這個問題? 如果我刪除「create_client_profile」它的作品,但是我會鬆散get_profile()。

您認爲this是一種解決方案嗎?我不確定它是否足夠Djangoish :)

+0

該鏈接上的博客文章如何不能成爲「Djangoish」?這實際上是Django文檔推薦的方式。 –

+0

我不確定是否因爲它在2008年發佈,他正試圖解決現在成爲Django一部分的問題。而且,在這篇文章的開頭,他一直在抱怨Django這樣做,所以據他說,他提供了更好的東西。這就是爲什麼我把它扔在這裏爲了檢查其他人的意見 – blaise

+0

我看到,他實際上推薦了一種不同於get_profile()的訪問配置文件的方式,但其他一切都是標準的Django。它仍然不是一個備用的「解決方案」。只要標準Django解決方案已經實施,只需使用該配置文件即可。 –

回答

0

所以,你有一個信號,無論何時創建用戶,都會自動創建一個客戶端。您的客戶端模型有一個強制性的ForeignKey類別,但您的信號不設置類別。

解決方案應該是顯而易見的:使您的類別FK null=True,或讓您的信號獲取/創建相關類別。

+0

我以前試過'null = True',它沒有用,但那是因爲視圖代碼中有錯誤。但現在它起作用了。但我仍然不明白這個信號。在創建用戶時如何創建客戶端,而客戶端也具有強制名稱字段。 – blaise

+0

如果未提供CharFields,則默認爲空字符串,因此不要違反null約束。 –

+0

好的,謝謝丹尼爾 – blaise

0

數據庫是否已包含數據爲Client?有可能是null類別的條目。

如果更改Clientcategory行:

category = models.ForeignKey(Category, null=True) 

幫助?

+0

'null = True'解決了它。 – blaise

相關問題