int()参数必须是字符串,类似字节的对象或数字,而不是'ForeignKey'

时间:2019-10-09 08:50:55

标签: django django-models

我是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), )

1 个答案:

答案 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), )

我的理解是,您希望将选择限制为TypeOfVatDueDatevat_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