2015-06-20 51 views
0

我試圖設置一個表格,從2個模型中的字段中繪製。將另一個模型添加到表單中?

我厭倦了像下面一樣添加模型,但不斷收到錯誤。

model = Server, Tag 

後端管理拿起2款之間的關係,我可以從後端但是通過我無法兩者結合在一起的形式更新。

views.py

from django.shortcuts import render, redirect, get_object_or_404 
from django.forms import ModelForm 

from servers.models import Server 
from servers.models import Tag 

class ServerForm(ModelForm): 
    class Meta: 
     model = Server, Tag 
     fields = ['name', 'order', 'first_name'] 

def server_list(request, template_name='servers/server_list.html'): 
    servers = Server.objects.all() 
    data = {} 
    data['object_list'] = servers 
    return render(request, template_name, data) 

def server_create(request, template_name='servers/server_form.html'): 
    form = ServerForm(request.POST or None) 
    if form.is_valid(): 
     form.save() 
     return redirect('server_list') 
    return render(request, template_name, {'form':form}) 

def server_update(request, pk, template_name='servers/server_form.html'): 
    server = get_object_or_404(Server, pk=pk) 
    form = ServerForm(request.POST or None, instance=server) 
    if form.is_valid(): 
     form.save() 
     return redirect('server_list') 
    return render(request, template_name, {'form':form}) 

def server_delete(request, pk, template_name='servers/server_confirm_delete.html'): 
    server = get_object_or_404(Server, pk=pk)  
    if request.method=='POST': 
     server.delete() 
     return redirect('server_list') 
    return render(request, template_name, {'object':server}) 

models.py

from django.db import models 
from django.core.urlresolvers import reverse 

class Tag(models.Model): 
    slug = models.SlugField(max_length=200, unique=True) 

    def __str__(self): 
     return self.slug 

class Server(models.Model): 
    name = models.CharField(max_length=200) 
    order = models.IntegerField() 
    first_name = models.CharField(max_length=250, blank=True, null=True) 
    tags = models.ManyToManyField(Tag) 

    def __unicode__(self): 
     return self.name 

    def get_absolute_url(self): 
     return reverse('server_edit', kwargs={'pk': self.pk}) 

server_form.py

<form method="post">{% csrf_token %} 
<!--  {{ form.as_p }} this brings in the whole form--> 

    Name <br> 
    {{ form.name }} <br> 
    Order <br> 
    {{ form.order }} <br> 
    First name <br> 
    tag <br> 
    {{ form.tag }} <br> <!--trying to get tag to work through this form--> 
    {{ form.first_name }} <br><br> 


    <input type="submit" value="Submit" /> 
</form> 

<table cellpadding="0" cellspacing="0"> 

我試圖讓{{form.tag}}部分工作和認識關係的形式。

任何幫助將不勝感激。

謝謝。

回答

0

您不能使用此語法在表單中使用多個模型。 Admin後端廣泛使用InlineModelFormSet來處理這種關係。看看https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/#inline-formsets

+0

感謝您的信息。我看到InlineModelFormSet如何處理與外鍵的關係。但無法設法使其與我的模型和視圖正常工作。可能必須從頭開始並從那裏開始構建。 – Jimmyn

+0

在處理標籤時,我認爲最好的選擇是使用CharField,在其中輸入一些彗星分隔的標籤,通過jquery tagit和自動完成(例如)管理UI,並在您的表單中使用clean_tags方法處理結果,這些方法返回一個標籤列表,方法是將它們通過彗形圖進行拆分,然後在save()方法中處理保存邏輯。如果它聽起來不錯,更新你最初的問題,以便我可以更新我的答案。 – Pcriulan

相關問題