2011-09-26 88 views
1

我有一個ModelChoiceField調用outage_name。我也有一個簡單的表單,允許您從列表中選擇項目。 ModelChoiceField是從MySQL DB中提取的。此查詢集位於forms.pyDjango匹配從ModelChoiceField到MySQL的外鍵

outage_name = forms.ModelChoiceField(queryset = Outage.objects.filter(published = True) 

models.py列在下面。

from django.db import models 
from django.contrib.auth.models import User 

class Outage(models.Model): 
    outage_name = models.CharField(max_length=60, unique=True) 
    published = models.BooleanField() 
    def __unicode__(self): 
     return self.outage_name 

class Detail(models.Model): 
    detail = models.CharField(max_length=60, unique=True) 
    user = models.ForeignKey(User) 
    outage = models.ForeignKey(Outage) 
    def __unicode__(self): 
     return self.outage 

當我從列表中選擇並提交我似乎無法弄清楚如何搭配停運= models.ForeignKey(停運)這是清單上選擇的形式。到正確的outage_name。在我的views.py我可以硬編碼的ID,它提交給數據庫,一切工作正常。

def turnover_form(request): 
    if request.user.is_authenticated(): 
     if request.method == 'POST': 
      form = TurnoverForm(request.POST) 
      if form.is_valid():   
       details = Detail.objects.get_or_create(
        detail = form.cleaned_data['detail'], 
        user = request.user, 
        outage = Outage.objects.get(pk=1)) 
      return HttpResponseRedirect('/turnover/user/') 
     else: 
      form = TurnoverForm() 
     variables = RequestContext(request, {'form': form}) 
     return render_to_response('turnover_form.html', variables) 
    else: 
     return HttpResponseRedirect('/authorization/') 

任何關於如何將id與所選項匹配的建議將不勝感激。我敢肯定,我的代碼不是非常pythonic,因爲我還在學習。

回答

1
outage = form.cleaned_data['outage'] # cleaned_data['outage'] is a model instance 
+0

您的建議工作,我還必須在我的模型中添加'\'返回u'%d'%self.outage_name_id'。 – Dunwitch