1

複数のモデルで構成されるアプリを開発しています。model.py の 2 番目のモデルでは、2 ~ 3 列で構成されています。charフィールド

私のmodel.pyファイルは

django.db からモデルをインポート django.contrib.auth.models からユーザーをインポート

class Customer(models.Model):
    user        =models.OneToOneField(User)
    birthday    =models.DateField()
    website     =models.CharField(max_length=50)
    store       =models.CharField(max_length=50)
    welcomemail =models.CharField(max_length=50)

    def __unicode__(self):
             return self.user

class Customer_check_attributes(models.Model):
    customer    = models.ForeignKey(Customer)
    billing_add =models.CharField(max_length=50)
    shipping_add    =models.CharField(max_length=50)
    payment_method  =models.CharField(max_length=50)
    shipping_method =models.CharField(max_length=50)
    reward_points   =models.CharField(max_length=50)

私のform.pyファイルとして

from django import forms
from django.contrib.auth.models import User
from django.forms import ModelForm
from customer_reg.models import Customer,Customer_check_attributes

class Registration_Form(ModelForm):
       first_name  = forms.CharField(label=(u'First Name'))
       last_name   = forms.CharField(label=(u'Last Name'))      
       username   = forms.CharField(label=(u'User Name'))
       email      = forms.EmailField(label=(u'Email Address'))
       password   = forms.CharField(label=(u'Password'), widget=forms.PasswordInput(render_value=False))

       class Meta:
              model=Customer

              exclude=('user',)
4

1 に答える 1

1

複数のモデルの属性を持つ html フォームが必要なようです。そのため、モデルごとに個別のフォームを作成する方法がありますが、1 つのビューとテンプレートを介して 1 つのページに表示し、同じように処理します。

ここに例があります

フォーム

#additional user attributes 
class Registration_Form(ModelForm):
     first_name  = forms.CharField(label=(u'First Name'))
     last_name   = forms.CharField(label=(u'Last Name'))      
     username   = forms.CharField(label=(u'User Name'))
     email      = forms.EmailField(label=(u'Email Address'))
     password   = forms.CharField(label=(u'Password'), widget=forms.PasswordInput(render_value=False))
     class Meta:
         model = User

class CustomerForm(ModelForm):
     class Meta:
         model = Customer
         exclude=('user',)

class Customer_check_attributesForm(ModelForm):
     class Meta:
         model = Customer_check_attributes
         exclude=('user',)

見る:

def customer_add(request):
    if request.method == 'POST':
         uform = Registration_Form(request.POST)
         cform = CustomerForm(request.POST)
         caform = Customer_check_attributesForm(request.POST)
         if uform.is_valid() :
             ...
             user = uform.save()
         if cform.is_valid() :
             ...
             customer = cform.save()
         if caform.is_valid() :
             ...
             cattr = caform.save()
  else:
      uform = Registration_Form()
      cform = CustomerForm()
      caform = Customer_check_attributesForm()         
  ctx = { 'uform': uform, 'cform':cform, 'caform': caform }
    return render_to_response('add_customer_template.html', ctx,
                context_instance = RequestContext(request))

サンプル add_customer_template.html

 <form> 
     {#other rendering logic#}
     {{ uform.as_p }}
     {{ cform.as_p }}
     {{ caform.as_p }}
 </form>

注: これはガイドライン コードです。エラーを処理し、ロジックを改善するための改善の余地があります。

于 2012-09-17T09:46:41.327 に答える