2016-12-31 53 views
0
class Item(models.Model): 
     id = models.AutoField(primary_key=True)    
     userId = models.ForeignKey(User, on_delete=models.CASCADE)   
     categoryId = models.ForeignKey(Category, on_delete=models.CASCADE) 
     itemName = models.CharField(max_length=100)  
     startDate = models.DateTimeField('startDate') 
     endDate = models.DateTimeField('endDate')  
     priority = models.IntegerField(default=0) 
     progress = models.IntegerField(default=0) 
     own = models.IntegerField(default=0) 
     advanced = models.IntegerField(default=0) 


    item = Item.objects.create(request.user.id,categoryId,txtItemName,txtStartDate,txtEndDate,priorityName,progressStatus,ownStatus,advanced) 
      item.save() 

這是要求主鍵字段。 如何在創建過程中獲得主鍵字段值?如何在Django中保存模型記錄

回答

2

從您的模型中刪除id字段,它是由Django自動添加的。

.save()在這裏沒有必要,.objects.create已經做到了。

而且最好使用關鍵字參數,那麼你就無法在你的論點,人們的順序犯錯知道什麼是什麼:

item = Item.objects.create(
    userId=request.user.id, 
    categoryId=categoryId, 
    itemName=txtItemName, 
    startDate=txtStartDate, 
    endDate=txtEndDate, 
    priority=priorityName, 
    progress=progressStatus, 
    own=ownStatus, 
    advanced=advanced) 

你不必給的值則這是自動設置的id字段。

但是等待:您可能從userIDcategoryID字段中收到錯誤。你應該爲他們分配相關領域的實例,或使用_id表單字段名:

userID=request.user, 
categoryID_id=categoryId, 

所以這些字段名稱的「ID」部分應該被刪除,這是令人困惑的。然後它變爲:

user=request.user, 
category_id=categoryId, 
+0

無法分配「>」:「Item.userId」必須是「用戶」實例。 –

+0

如果你還沒有訪問用戶的任何屬性,那麼你會得到這個結果,所以Django推遲了是否確實存在當前用戶的決定。 – RemcoGerlich

+0

您應該檢查用戶是否已登錄(使用request.user.is_authenticated()),因爲您還將如何爲沒有用戶標識的用戶存儲記錄。 – RemcoGerlich

相關問題