通过外键关系限制Django形式的选择

时间:2019-05-11 06:15:38

标签: django forms foreign-keys cascade

我的模特

MacroPianoDeiConti类(models.Model):

codice = models.CharField(max_length=6)
descrizione = models.CharField(max_length=400)

PianoDeiConti类(models.Model):

macro = models.ForeignKey(MacroPianoDeiConti, on_delete=models.SET_NULL, null=True, blank=True,
                               default=None, related_name='MacroP')
codice = models.CharField(max_length=6)
descrizione = models.CharField(max_length=400)

tipo = models.ForeignKey(ContoTipo, on_delete=models.SET_NULL, null=True, blank=True,
                          default=None, related_name='ContTi')

def __str__(self):
    return str(self.codice) + ' ' + self.descrizione

CostoDocumento(models.Model)类:

dataregistrazione = models.DateField(default=date.today())
numerodocumento = models.CharField(max_length=6)
datadocumento = models.DateField(default=date.today())
fornitore = models.ForeignKey(Fornitori, on_delete=models.SET_NULL, null=True, blank=False,
                          default=None, related_name='Forn')
importo = models.FloatField(null=True, blank=False, default='0')

conto = models.ForeignKey(PianoDeiConti, on_delete=models.SET_NULL, null=True, blank=False,
                               default=None, related_name='Cont')
inizio = models.DateField(null = True, blank = True, default = None)
fine = models.DateField(null=True, blank=True, default=None)

def __str__(self):
    return self.dataregistrazione + ' ' + self.fornitore

'''

这是我的表格:

''' 类CostoDocumentoForm(forms.ModelForm):

Meta类:

model = CostoDocumento
fields = '__all__'
labels = {
    'dataregistrazione': _('Data Registrazione'), 'numerodocumento': _('Numero Documento'),
    'datadocumento': _('Data Documento'), 'fornitore': _('Fornitore'), 'importo': _('Importo'),
    'conto': _('Conto'), 'inizio': _('Inizio Periodo'), 'fine': _('Fine Periodo'),
}

def __init__(self, *args, **kwargs):
    super(CostoDocumentoForm, self).__init__(*args, **kwargs)
    self.fields['conto__macro_id'].queryset = self.fields['conto__macro_id'].queryset.filter(conto__macro=1)

'''

我想通过conto__macro = 1过滤模板中的层叠字段

TY

编辑:

forms.py

def __init__(self, *args, **kwargs):
    super (CostoDocumentoForm,self ).__init__(*args,**kwargs) # populates the post
    self.fields['conto'].queryset = PianoDeiConti.objects.exclude(macro_id=8).exclude(tipo_id=3)

有效

0 个答案:

没有答案