2014-03-19 43 views
2

我有一個模型:如何使用objects.create保存django字段?

class Certificate(models.Model): 
    comments = models.TextField(blank=True, default='') 
    generic_certificate = models.ForeignKey(GenericCertificate, related_name='certificates_awarded') 
    tag = models.ForeignKey('Tag', related_name='certificates_awarded', null=True, blank=True) 
    created_at = models.DateTimeField(auto_now_add=True) 
    history_timestamp = models.DateTimeField(auto_now=True) 
    rewardee = models.ForeignKey(OrganisationUser, related_name='certificates_rewarded') 
    position = models.CharField(max_length=50, default = '0,0') 

我要救定的主鍵位置的字段。

這裏是views.py:

def post(self, request , *args , **kwargs): 
     comments = Certificate.objects.values("comments").filter(pk = kwargs.get('cert_id')) 
     gen_certi = Certificate.objects.values("generic_certificate").filter(pk = kwargs.get('cert_id')) 
     tag = Certificate.objects.values("tag").filter(pk = kwargs.get('cert_id')) 
     history_timestamp = Certificate.objects.values("history_timestamp").filter(pk = kwargs.get('cert_id')) 
     rewardee = Certificate.objects.values("rewardee").filter(pk = kwargs.get('cert_id')) 
     position = request.POST.get('hid') 
     position = str([position]) 
     a = Certificate.objects.create(comments=comments, generic_certificate = gen_certi , tag=tag,rewardee=rewardee, position=position) 
     print a 

它給錯誤:

Exception Value:  
Cannot assign "[{'generic_certificate': 2}]": "Certificate.generic_certificate" must be a "GenericCertificate" instance. 

請幫助如何位置字段保存到數據庫中。

+0

你想要更新同一條記錄,或者想要爲'request.POST'中讀取的'position'在數據庫中添加新記錄嗎? – anuragal

+0

只想更新 –

回答

3

gen_certi變量是一個查詢集(對象的列表),因爲你使用filter() - 使用get()代替:

gen_certi = Certificate.objects.get(pk = kwargs.get('cert_id')).generic_certificate 

其實,我不明白什麼是你計劃在視圖做。如果要修改的對象,沒有必要覆蓋現有的領域,只是更新傳遞給視圖中request.POST的領域裏,如位置:

try: 
    certificate = Certificate.objects.get(pk = kwargs.get('cert_id')) 
    certificate.position = request.POST.get('hid') 
    certificate.save() 
except DoesNotExist: 
    # create new certificate 
    certificate = Certificate() 
    ... 

希望有所幫助。

+0

是的..其工作... :)謝謝。嘗試1小時 –

相關問題