2016-01-05 73 views
0

我試圖創建一些服務端點,這些端點基於發送到URL中的數據創建對象。目前,我收到的錯誤是說我的模型中有多個外鍵的項目,它們沒有啓動實例。我怎樣才能啓動一個實例或讓它工作。Django使用外鍵創建沒有窗體的對象

Model.py 

class timeListened(models.Model): 
listenedeventid = models.AutoField(db_column='listenedEventID', max_length=10,primary_key=True) 
userid = models.ForeignKey(AuthUser,db_column='userID',blank=False,null=False,max_length=255,default=get_current_user,editable=True) 
sermonid = models.ForeignKey(Contentdownloadtable,db_column='sermonID',unique=True,verbose_name='Sermon Name') 
dateListened = models.DateTimeField(db_column='dateTimeListened',auto_now=True) 
    class Meta: 
     managed = True 
     db_table = 'timeListened' 
     verbose_name = 'Viewed Sermon' 
     verbose_name_plural = 'Viewed Sermons' 
     app_label = 'web' 

service.py 

def sermonHistoryAdd(request): 
if request.user.is_authenticated(): 
    if request.GET.get("sermonid","") == "": 
     results = 'No Sermon ID passed' 
    else: 
     sermonid = request.GET.get("sermonid","") 
     newHistory = timeListened(sermonid=sermonid,dateListened=datetime.datetime.now(),userid=request.user.id) 
     newHistory.save() 
     results = 'test' 
else: 
    results = 'Not Logged In.' 
return HttpResponse(results) 

我得到的錯誤信息是:

無法分配 「1」: 「timeListened.userid」 必須是 「爲AuthUser」 實例。 如果我拿走用戶標識,我會得到同樣的東西 - 說它必須是一個「Contentdownloadtable」實例。

它爲什麼不讓我創建具有外鍵的對象。

URLS.py: 
url(r'^service/sermonhistory/add/', service.sermonHistoryAdd, name='sermonHistoryAdd'), 

回答

0

爲什麼不使用

userId = model.ForeignKey(User, .....) 

,並使用

newHistory = timeListened(sermonid=sermonid,dateListened=datetime.datetime.now(),userid=request.user) 
newHistory.save() 
+0

同樣的問題。我可以將它的userid部分全部取出,並且它與來自Contentdownloadtable模型的「sermonid」執行相同的操作。 –

+0

@TrentBrown您必須從sermonid = request.GET ['sermonid']'創建'Countdownloadtable'的實例,並將實例傳遞給'timeListened(.....,sermomid = sermonidIntace)'也 – pitaside

+0

我發現如何在不創建實例的情況下做到這一點。我很好奇你將如何創建一個實例。我已經看到在django中做了這麼多事,卻沒有對它們做任何事情。 –

0

一切都只是我不希望加載的實例有外鍵的對象好你的嘗試 - - 我只需要將_id添加到外鍵對象。

newHistory = timeListened(sermonid_id=sermonid,dateListened=datetime.datetime.now(),username_id=username)