Ошибка оператора фильтра 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'])
   
Вернуться на верх