SORU
15 Kasım 2008, CUMARTESİ


Django nasıl bir ModelForm içinde ForeignKey seçimler süzgeç?

models.py benim: şu var ki

class Company(models.Model):
   name = ...

class Rate(models.Model):
   company = models.ForeignKey(Company)
   name = ...

class Client(models.Model):
   name = ...
   company = models.ForeignKey(Company)
   base_rate = models.ForeignKey(Rate)

I. e. birden fazla Companies, Rates Clients bir dizi olan her vardır. Her Client ana dan seçilen 11* *bir baz olması gerekir Company's Rates, Company's Rates.

Ne zaman oluşturmak için bir form ekleme Client etmek istiyorum çıkarın Company seçenek (o zaten seçili üzerinden bir "Müşteri Ekle" düğmesi üzerinde Company sayfa) ve sınır Rate seçimler Company de.

Nasıl Django 1.0 bunun için ne yapmam lazım?

forms.py benim şu anki dosya şu anda demirbaş:

from models import *
from django.forms import ModelForm

class ClientForm(ModelForm):
    class Meta:
        model = Client

Ve views.py de temel

from django.shortcuts import render_to_response, get_object_or_404
from models import *
from forms import *

def addclient(request, company_id):
    the_company = get_object_or_404(Company, id=company_id)

    if request.POST:
    	form = ClientForm(request.POST)
    	if form.is_valid():
    		form.save()
    		return HttpResponseRedirect(the_company.get_clients_url())
    else:
    	form = ClientForm()

    return render_to_response('addclient.html', {'form': form, 'the_company':the_company})

Django 0.96 bu şablon oluşturma işleminden önce aşağıdaki gibi bir şey yaparak kesmek için başardı:

manipulator.fields[0].choices = [(r.id,r.name) for r in Rate.objects.filter(company_id=the_company.id)]

ForeignKey.limit_choices_to umut verici görünüyor ama the_company.id geçmek nasıl bilmiyorum ve eğer Yönetici arayüzü dışarıda bir şekilde çalışacaktır eğer emin değilim.

Teşekkürler. (Bu çok basit bir istek gibi görünüyor ama eğer yeniden bir şey olursa önerilere açığım.)

CEVAP
15 Kasım 2008, CUMARTESİ


ForeignKey django ile temsil edilir.formlar.Model QuerySet olan bir ChoiceField olan ModelChoiceField,. ModelChoiceField başvurusu.

Sahada bir QuerySet sağlamak queryset öznitelik. Formunuzu nasıl inşa edildiğini bağlıdır. Eğer açık bir form oluşturmak, alanları doğrudan adında olacak.

form.rate.queryset = Rate.objects.filter(company_id=the_company.id)

Eğer varsayılan ModelForm nesne alırsan, form.fields["rate"].queryset = ...

Bu açıkça görünümünde yapılır. Hayır hack.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Cristina Landa

    Cristina Lan

    28 Ocak 2010
  • Neil Cicierega

    Neil Ciciere

    22 Mart 2006
  • PomplamooseMusic

    PomplamooseM

    28 HAZİRAN 2008