Ошибка оператора фильтра Django - недопустимый литерал для int() с основанием 10:
У меня есть 2 таблицы. Я хочу отфильтровать записи из второй таблицы на основе отфильтрованного значения из первой таблицы. Что-то не так в моем втором операторе фильтрации. Если кто-нибудь может помочь мне разобраться с этим?
report_table_data=report_table.objects.filter(cn_number=Master_table_data.cn_number))
Мои коды выглядят следующим образом.
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: invalid literal for int() with base 10: 'USS2000203'
>
Когда вы задаете полю модели значение models.ForeignKey()
, вы задаете его для всего объекта, а не для первичного ключа. Поэтому более подходящим именем для "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))
Позже я понял, что допустил ошибку в моей "report_table". Я изменил коды, как показано ниже, и все работает.
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 ):
# 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 )
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(sl_no=request.GET['key'])