2011-02-08 12 views
0

DBにデータを挿入しようとしましたが、以下のエラーが発生しました。djangoの形式でデータを送信中にエラーが発生しました

enter code here 

model.py 

from django.db import models 

# Create your models here. 

class Profile(models.Model): 
    name = models.CharField(max_length=50, primary_key=True) 
    assign = models.CharField(max_length=50) 
    doj = models.DateField() 

    class Meta: 
     db_table= 'profile' 


    def __unicode__(self): 

     return u'%s' % (self.name) 



class working(models.Model): 
    w_name =models.ForeignKey(Profile, db_column='w_name') 
    monday = models.IntegerField(null=True, db_column='monday', blank=True) 
    tuesday = models.IntegerField(null=True, db_column='tuesday', blank=True) 
    wednesday = models.IntegerField(null=True, db_column='wednesday', blank=True) 

    class Meta: 
     db_table = 'working' 



    def __unicode__(self): 
     return u'%s ' % (self.w_name) 

forms.py 

from models import * 
from django import forms 

class WorkingForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     super(WorkingForm, self).__init__(*args, **kwargs) 
     self.fields['w_name'] =forms.CharField(initial='x',widget=forms.HiddenInput()) 

    class Meta: 
     model = working 
     exclude = ('id') 

view.py 

# Create your views here. 
from forms import * 
from django import http 
from django.shortcuts import render_to_response, get_object_or_404 


def index(request): 
    if request.method == "POST": 
      form = WorkingForm(request.POST) 
      if form.is_valid(): 
      form.save() 
      return http.HttpResponse('Added') 
    else: 
    form = WorkingForm() 
    return render_to_response('add_workingdays.html',locals()) 

Error Message: 

ValueError at/

Cannot assign "u'x'": "working.w_name" must be a "Profile" instance. 

Request Method:  POST 
Request URL: http://127.0.0.1:8000/ 
Django Version:  1.2.4 
Exception Type:  ValueError 
Exception Value:  

Cannot assign "u'x'": "working.w_name" must be a "Profile" instance. 

Environment: 

Request Method: POST 
Request URL: http://127.0.0.1:8000/ 
Django Version: 1.2.4 
Python Version: 2.6.5 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'check'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/core/handlers/base.py" in get_response 
    100.      response = callback(request, *callback_args, **callback_kwargs) 
File "/home/xyz/newapp/../newapp/check/views.py" in index 
    10.   if form.is_valid(): 
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/forms/forms.py" in is_valid 
    121.   return self.is_bound and not bool(self.errors) 
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/forms/forms.py" in _get_errors 
    112.    self.full_clean() 
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/forms/forms.py" in full_clean 
    269.   self._post_clean() 
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/forms/models.py" in _post_clean 
    320.   self.instance = construct_instance(self, self.instance, opts.fields, opts.exclude) 
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/forms/models.py" in construct_instance 
    51.    f.save_form_data(instance, cleaned_data[f.name]) 
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/db/models/fields/__init__.py" in save_form_data 
    416.   setattr(instance, self.name, data) 
File "/usr/local/lib/python2.6/dist-packages/Django-1.2.4-py2.6.egg/django/db/models/fields/related.py" in __set__ 
    318.         self.field.name, self.field.rel.to._meta.object_name)) 

Exception Type: ValueError at/
Exception Value: Cannot assign "u'x'": "working.w_name" must be a "Profile" instance. 

私は2つのテーブル間の外部キー関係を行なったし、私はそれが「u'x '」を割り当てることができません取得作業テーブルにデータを挿入しようとしています: 『working.w_nameは』 『プロフィール』のインスタンスである必要があります。

私が削除した場合

def __init__(self, *args, **kwargs): 
    super(WorkingForm, self).__init__(*args, **kwargs) 
    self.fields['w_name'] =forms.CharField(initial='x',widget=forms.HiddenInput()) 

それが正常に動作しますが、私は隠されたとして、ユーザー名を入力したいが、それは、外部キーエラーを投げ

EDIT:

はまたForiegnkey issue while submitting the formを参照してください。同じエラーを投げる問題のために。

答えて

2

更新:
通常ModelFormはそのto_pythonメソッドがPK値から外部キーのインスタンスを取得して管理ModelChoiceFieldを生成ForeignKeyフィールドのように見えます。

CharField.to_pythonはちょうど私がModelFormclean_w_nameメソッドをオーバーライドして、それはあなたのキーからプロファイルオブジェクトを返し保証するであろうsmart_unicode(value)

を返します。

class WorkingForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     super(WorkingForm, self).__init__(*args, **kwargs) 
     self.fields['w_name'] =forms.CharField(initial='x',widget=forms.HiddenInput()) 

    def clean_w_name(self): 

     data = self.cleaned_data['w_name'] 
     try: 
      profile = Profile.objects.get(pk=data) 
      return profile 
     except Profile.DoesNotExist: 
      raise forms.ValidationError("Profile doesn't exist") 

    class Meta: 
     model = working 
     exclude = ('id') 
+0

ここでの名前は、PK名= models.CharField(max_length = 50、primary_key = True)で、w_name作業表に名前を保存します。 – sush

+0

うーん、よかった。それを助ける方法を知らないが、これは興味深いと思う! –

+0

例外タイプ:ValueError at/ 例外値: "u'x '"を割り当てることはできません: "working.w_name"は "Profile"インスタンスでなければなりません。 – sush

関連する問題