2012-03-13 16 views
2

私は次のモデルを持っています:部門、プロジェクト、部署プロジェクト、従業員、および会員。部署には多くのプロジェクトがあり、プロジェクトにはメンバーシップを通して役割を割り当てられた従業員が多数存在します。 EUが複数のプロジェクトに従業員の役割を割り当てることができるように、私はInlineFormsetを作成しようとしています。DJANGO:リテラル "モデルオブジェクト"の代わりにフォームにモデルオブジェクト名をレンダリングする方法は?

私のテンプレートは正しいラベルとフィールドをレンダリングしますが、Departmentprojectsのラベルとフィールドにはプロジェクト名が表示されません。 「Departmentprojectsオブジェクト」のみを表示します。 "Departmentprojectsオブジェクト"ではなく、プロジェクトの名前をレンダリングするフォームを取得するにはどうすればよいですか?

- ブラウザで

現在のテンプレート:

Departmentprojectラベル:( "Departmentprojectsオブジェクト" として記載されている2つのオプションがドロップダウンメニュー) 役割:プロジェクトマネージャー

ブラウザで目的のテンプレート:

プロジェクト名012:プロジェクトマネージャ

Departmentproj電気ショック療法名2:いくつかの他の役割

-

MODELS:

class Projects(models.Model): 
    name = models.CharField(max_length=20) 
    def __unicode__(self): 
     return self.name 

class Department(models.Model): 
    name = models.CharField(max_length=20) 
    def __unicode__(self): 
     return self.name 

class Employees(models.Model): 
    name = models.CharField(max_length=15) 
    def __unicode__(self): 
     return self.name 

class Departmentprojects(models.Model): 
    department = models.ForeignKey(Department) 
    projects = models.ForeignKey(Projects) 
    members = models.ManyToManyField(Employees, through='Membership') 

class Membership(models.Model): 
    departmentprojects = models.ForeignKey(Departmentprojects) 
    employees = models.ForeignKey(Employees) 
    role = models.CharField(max_length=20) 

-

VIEW

def addtoprojects(request, employees_id): 
    e = get_object_or_404(Employees, pk=employees_id) 
    ProjectsInlineFormSet = inlineformset_factory(Employees, Membership, max_num=1) 
    if request.method == "POST": 
     formset = ContactInlineFormSet(request.POST, instance=e) 
     if formset.is_valid(): 
      formset.save() 
    else: 
     formset = ProjectsInlineFormSet(instance=e) 
    return render_to_response('gcstest/contact.html', {'e': e, 'formset': formset}, context_instance=RequestContext(request)) 

-

TEMPLATE

<form method="post" action="/assign_to_project/{{ employees.id }}/"> 
    {% csrf_token %} 
    <table> 
     {{ formset }} 
    </table> 
    <input type="submit" value="Submit"/> 
</form> 
+0

私はここに概念的な誤りがあると思います。 'Departmentprojects'モデルのポイントは何ですか? ProjectsをDepartmentsにリンクする外部キーまたは多対多のフィールドを配置し、プロジェクトにメンバーを添付したいだけではないですか? – nrabinowitz

+1

また、「Department」の場合と同じように、原則としてモデルの名前を単数形で指定したいとします。正当な理由は、 'projects = models.ForeignKey(Projects)'という行は、単一のプロジェクトとの関係を作成するだけですが、それは多くのプロジェクトとの関係を作成するかのように読み込まれます。 – nrabinowitz

+0

申し訳ありませんプログラミングに新しい..しかし、私はこれは、プロジェクトが複数の部門に属することができるので、このように設定すると思います。プロジェクトテーブルには、さまざまなプロジェクト部門の名前のみが含まれています。 – thedeepfield

答えて

3

は、例えば、あなたのDepartmentprojectsモデルに__unicode__メソッドを追加します。

class Departmentprojects(models.Model): 
    department = models.ForeignKey(Department) 
    projects = models.ForeignKey(Projects) 
    members = models.ManyToManyField(Employees, through='Membership') 

    def __unicode__(self): 
     return "%s > %s" % (self.department, self.projects) 
+0

なぜ「return self.programs」を追加できないのですか?私がそれをするとエラーが出ます:レンダリング中にタイプエラーが発生しました:Unicodeへの強制:必要な文字列またはバッファ、プロジェクトが見つかりました "またラベルにはDepartmentprojectsが表示されます。ドロップダウンメニューを表示するのではなく、プロジェクトごとに(ブラウザの希望テンプレートのように)? – thedeepfield

関連する問題