2012-01-31 7 views
1

Djangoオブジェクトモデルに少し戸惑っています。私はこのようなモデルがあります:DjangoのOneToOneField、ManyToManyField、およびManyToOneFieldについての説明

# Create your models here. 
class Item(models.Model): 
    code = models.CharField(max_length=200, unique=True) 
    barcode = models.CharField(max_length=300) 
    desc = models.CharField('Description',max_length=500) 
    reg_date = models.DateField('registered date') 
    registrar = models.CharField(max_length=100) 

    def __unicode__(self): 
     return self.code + ' : ' + self.desc 

class ItemInfo(models.Model): 
    item = models.OneToOneField(Item, primary_key=True) 
    supplier = models.ForeignKey(Supplier) 
    stock_on_hand = models.IntegerField() 
    stock_on_order = models.IntegerField() 
    cost = models.IntegerField() 
    price = models.IntegerField() 
    unit = models.CharField(max_length=100) 
    lead_time = models.IntegerField() 

をしかし、私はmodelformsに項目とItemInfoを取得しようとしたとき、私はこのエラーを得た: 'ModelFormOptions' object has no attribute 'many_to_many'。私はこの行に何か問題があると思った。supplier = models.ForeignKey(Supplier)。あなたは

def details(request, code): 
    csrf_context = RequestContext(request) 
    current_user = User 
    if request.user.is_authenticated(): 
     item = Item.objects.get(pk=code) 
     item_info = ItemInfo.objects.get(pk=item.pk) 
     item_form = ItemForm(instance=item) 
     item_info_form = ItemInfoForm(instance=item_form) 
     return render_to_response('item/details.html', 
            {'item_form' : item_form, 'item_info_form' :  item_info_form}, 
            csrf_context) 
    else: 
     return render_to_response('error/requires_login.html', csrf_context) 

Traceback: 
Traceback: 
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "G:\tulip\stock\item\views.py" in details 
    131.   item_info_form = ItemInfoForm(instance=item_form) 
File "C:\Python27\lib\site-packages\django\forms\models.py" in __init__ 
    237.    object_data = model_to_dict(instance, opts.fields, opts.exclude) 
File "C:\Python27\lib\site-packages\django\forms\models.py" in model_to_dict 
    112.  for f in opts.fields + opts.many_to_many: 

Exception Type: AttributeError at /item/details/1/ 
Exception Value: 'ModelFormOptions' object has no attribute 'many_to_many' 
+0

instanceItemInfoインスタンスである必要がありますが、

正しいラインを形成していませんか?あなたのModelForm。私は何が 'many_to_many'にアクセスしようとしているのが好奇妙です... –

+0

@YujiTomitaはここにモデルフォームとトレースバックです –

+0

@ユージトミタはそれを手に入れました!私は 'item_info_form = ItemInfoForm(instance = item_form)'という行のパラメータとしてフォームを渡しました。 'item_info_form = ItemInfoForm(インスタンス= item_info)'でなければなりません。私はそれに目を向けることができるように誰かが答えとして投稿してください。私のような別の不器用なアーツを助けてください。 –

答えて

2

:のModelForm:

class ItemForm(ModelForm): 
    class Meta: 
     model = Item 
     widgets = { 
      'registrar' : TextInput(attrs={'ReadOnly' : 'True'}) 
     } 

class ItemInfoForm(ModelForm): 
    class Meta: 
     model = ItemInfo 
     exclude = ('item') 

これは私がモデルから人口値でフォームを生成する方法である誰かがときForeignKeyまたは関係分野(OneToOneFields, ManyToManyFields, ManyToOneFields)

Editを使用するように私に説明することができますItemFormインスタンスでItemInfoFormをインスタンス化しています。あなたはトレースバックを投稿することができ

item_info_form = ItemInfoForm(instance=item_info) 
関連する問題