Bir form kümesi oluşturmak için inlineformset_factory kullanmaya çalışıyorum. BenceDjango inlineformset_factory içinde Sorgu Queryset
class Measurement(models.Model):
subject = models.ForeignKey(Subject)
experiment = models.ForeignKey(Experiment)
assay = models.ForeignKey(Assay)
values = models.CommaSeparatedIntegerField(blank=True, null=True)
class Experiment(models.Model):
date = models.DateField()
notes = models.TextField(max_length = 500, blank=True)
subjects= models.ManyToManyField(Subject)
i var: My modeller olarak tanımlanan
def add_measurement(request, experiment_id):
experiment = get_object_or_404(Experiment, pk=experiment_id)
MeasurementFormSet = inlineformset_factory(Experiment, Measurement, extra=10, exclude=('experiment'))
if request.method == 'POST':
formset = MeasurementFormSet(request.POST,instance=experiment)
if formset.is_valid():
formset.save()
return HttpResponseRedirect(experiment.get_absolute_url())
else:
formset = MeasurementFormSet(instance=experiment)
return render_to_response("data_entry_form.html", {"formset": formset, "experiment": experiment }, context_instance=RequestContext(request))
ama Measurement.subject alanını kısıtlamak istediğiniz Experiment.subjects sorgu kümesi tanımlanan tek denekler için. Bunu yapmanın birkaç farklı yolunu denedim ama bunu başarmanın en iyi yolunun ne olduğu konusunda emin değilim. BaseInlineFormset sınıfını yeni bir queryset ile aşmaya çalıştım, ancak deneme parametresini doğru bir şekilde nasıl geçeceğimi anlayamadım.
(Ben de formset link parametre geçirmek için buraya bir yol olarak bilgi dahil)Güncelleme cevap :
views.py
def add_measurement(request, experiment_id):
experiment = get_object_or_404(Experiment, pk=experiment_id)
MeasurementFormSet = inlineformset_factory(Experiment, Measurement, extra=10, can_delete=True, form=MeasurementForm)
MeasurementFormSet.form = staticmethod(curry(MeasurementForm, experiment=experiment))
if request.method == 'POST':
formset = MeasurementFormSet(request.POST)
if formset.is_valid():
formset.save()
return HttpResponseRedirect(experiment.get_absolute_url())
else:
formset = MeasurementFormSet()
return render_to_response("data_entry_form.html", {"formset": formset, "experiment": experiment }, context_instance=RequestContext(request))
forms.py
class MeasurementForm(ModelForm):
class Meta:
model = Measurement
def __init__(self, *args, **kwargs):
experiment = kwargs.pop('experiment')
super(MeasurementForm, self).__init__(*args, **kwargs)
self.fields["subject"].queryset = Subject.objects.filter(experiment=experiment)
Python'da bir köri() 'yi daha önce hiç duymadım, kesinlikle yerleşik değil. EDIT: ... Ahh .. Sadece bağlantılı yazıyı fark ettim: django.utils'ten .functional import curry – Rich
Bu hala Django 1.5'te çalışıyor mu? Aşağıdaki hatayı alıyorum: __init __() beklenmedik bir anahtar kelime argümanı var 'empty_permitted' – Puzzled79