Django过滤器语句错误-int()的基数为10的文本无效:

acruukt9  于 2022-12-30  发布在  Go
关注(0)|答案(2)|浏览(85)

我有两个表。我想根据第一个表中的筛选值筛选第二个表中的记录。我的第二个筛选语句中有错误。是否有人可以帮助我进行排序?
报告表数据=报告表.对象.筛选器(cn编号=主表数据. cn编号))
我的代码如下。
Models.py

class Master_table(models.Model):
    sl_no = models.AutoField(primary_key=True)
    cn_number = models.CharField(max_length=10, null=False)

class report_table( models.Model ):
    cn_number = models.ForeignKey(Master_table, on_delete=models.CASCADE)
    remarks = models.CharField( max_length=20, null=False )

Views.py

def any_view(request):
    Master_table_data=Master_table.objects.get(sl_no=request.GET['key'])
    report_table_data=report_table.objects.filter(cn_number=Master_table_data.cn_number))

这将引发以下错误。
ValueError:对于以10为基数的int(),文本无效:"美国编号2000203"

qojgxg4l

qojgxg4l1#

后来我意识到,我在我的“report_table”中犯了错误。我修改了下面的代码,它正在工作。

型号.py

class Master_table(models.Model):
    sl_no = models.AutoField(primary_key=True)
    cn_number = models.CharField(max_length=10, null=False)

class report_table( models.Model ):
    # I corrected below field name from "cn_number" to "sl_no"
    sl_no = models.ForeignKey(Master_table, on_delete=models.CASCADE)
    remarks = models.CharField( max_length=20, null=False )

浏览量.py

def any_view(request):
    Master_table_data=Master_table.objects.get(sl_no=request.GET['key'])
    report_table_data=report_table.objects.filter(sl_no=request.GET['key'])
eit6fx6z

eit6fx6z2#

当你将一个模型字段设置为models.ForeignKey()时,Django动态API会将其视为对整个对象的引用,而不是主键。因此,“cn_number”作为外键的更合适的名称可能是“master_table”。然后,你可以使用model_name__field_name=field_value过滤外部模型字段。
因此,对于report_table模型:

master_table = models.ForeignKey(Master_table, on_delete=models.CASCADE)

对于滤波器功能:

report_table_data = report_table.objects.filter(master_table__cn_number=Master_table_data.cn_number))

相关问题