2014-04-09 47 views
0

models.py結合兩種不同的模式字段form.py在Django

class Keyword(models.Model): 
    keyname = models.CharField(max_length=45, unique = True) 
    project = models.ForeignKey('Project') 

class KeywordCache(models.Model): 
    keyword = models.ForeignKey('Keyword') 
    testcase = models.ForeignKey('TestcaseCache') 


class TestcaseCache(models.Model): 
    name = models.CharField(max_length=60) 
    package_name = models.CharField(max_length=100) 
    summary = models.TextField() 
    pre_requisite = models.TextField(blank = True) 
    steps = models.TextField() 
    expected_results = models.TextField() 
    post_test = models.TextField(blank = True) 
    data_provider = models.TextField(blank = True) 
    author = models.ForeignKey(Engineer, related_name = 'author_id') 
    reviewer = models.ForeignKey(Engineer,related_name = 'reviewer_id',null=True,blank = True,default=None) 
    release = models.CharField(max_length=45, blank = True) 
    creation_date = models.DateField(auto_now_add=True) 
    bugs = models.TextField(blank = True) 
    notes = models.TextField(blank = True) 
    project = models.ForeignKey('Project') 
    feature = models.ForeignKey('FeatureCache') 

Forms.py

from django import forms 
from apps.tcg.models import TestcaseCache 
from apps.tcg.models import Keyword 
from django.core.exceptions import ValidationError 
from django.forms import ModelForm 

# Create the form class. 


class TestcaseCacheForm(forms.ModelForm),KeywordForm(models.ModelForm): 

    class Meta: 
     model = TestcaseCache,Keyword 
     fields = ('name','package_name','summary','pre_requisite','steps','expected_results','post_test','data_provider','author','reviewer','release',keyname,'bugs','notes','project','feature') 

views.py

from forms import TestcaseCacheForm 

    def createForm(request): 
     return render(request,'tcgform.html',{'form':TestcaseCacheForm(),'testcase_object_array':testcase_object_array,'author_name':author_name,'project_name':project_id,'feature_name':feature_name}) 
+2

你似乎忘了問一個問題。 –

+0

問題在哪裏? –

+0

我的問題是如何在一個窗體中組合兩個diff模型的兩個diff字段 –

回答

1

莫delForms不允許您繼承多個模型類,但是,視圖對它可以處理的表單類的數量無動於衷。對於最終用戶,您可以將兩種表單類組合在一個HTML表單中。例如,假設你有兩個模型表單類:

def my_view(request): 
    keyword_form = KeywordForm(request.POST or None) 
    another_form = AnotherForm(request.POST or None) 

    if keyword_form.is_valid and another_form.is_valid(): 
     # do whatever 

    return render(request, 'your-template.html', 
     {'keyword_form': keyword_form, 'another_form': another_form}) 


# your_template.html 
<form action="." method="post" enctype="application/x-www-form-urlencoded"> 
    <ul> 
     {{ keyword_form.as_ul }} 
     {{ another_form.as_ul }} 
    </ul> 
    <button type="submit">Submit</button> 
</form> 

當然,如果你需要嚴格在什麼領域走到哪裏,你總是可以定義的,而不是使用快速和骯髒的渲染你的現場位置控制。希望能幫助你。

相關問題