我是Django的初学者。
我需要仅显示所选国家/地区中存在的type_of_due_date的列。
在“类InputType”中,我尝试使用limit_choices_to和Q函数,但是看到类似
的错误int()参数必须是字符串,类似字节的对象或数字,而不是'ForeignKey'#
请帮忙。我做错了什么?
我的模特:
class InputVatDueDate(models.Model):
country = models.ForeignKey(Country, verbose_name='Country', on_delete=models.CASCADE, db_index=True,
blank=True)
date = models.DateField(_('date'), default=datetime.datetime.now)
class Meta:
verbose_name = _('input vat due date')
verbose_name_plural = _('input vats due date')
unique_together = (('country', 'date'),)
def __str__(self):
return self.country.name
class TypeOfVatDueDate(models.Model):
vat_due_date = models.ForeignKey(InputVatDueDate, on_delete=models.CASCADE)
type_of_due_date = models.CharField(max_length=100, choices=enum_to_choice(TypeDueDates))
date_of_start = models.IntegerField(_('day of start date'))
def __str__(self):
return self.type_of_due_date
class InputType(models.Model):
vat_due_company = models.ForeignKey(CompanyVatDueDate, on_delete=models.CASCADE)
country = models.ForeignKey(InputVatDueDate, on_delete=models.CASCADE,)
type_of_due_date = models.ForeignKey(TypeOfVatDueDate, on_delete=models.CASCADE, limit_choices_to=Q(vat_due_date_id=country), )
答案 0 :(得分:1)
您的问题在这里:
class InputType(models.Model):
...
type_of_due_date = models.ForeignKey(TypeOfVatDueDate, on_delete=models.CASCADE, limit_choices_to=Q(vat_due_date_id=country), )
我的理解是,您希望将选择限制为TypeOfVatDueDate
与vat_due_date
的值相同的country
实例
在此范围内,变量country
是模型 class 的ForeignKey
字段,而不是当前模型的country
字段的值< em>实例。
我不知道在模型级别上实现您要实现的目标。您将不得不在其他地方执行此操作,例如在自定义ModelForm中:
class InputTypeForm(forms.ModelForm):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
# Restrict queryset if country is set
if self.instance and self.instance.country:
self.fields['type_of_due_date'].queryset = TypeOfVatDueDate.objects.filter(vat_due_date=country)
class Meta:
model = InputType