Проблема с возвратом данных в шаблонах django

Так что я работаю над небольшим проектом django и у меня проблема с внешним ключом. У меня есть модель с 2 таблицами mymodel1 и mymodel2.

#Models.py
class Mymodel1(moels.Model):
  name = models.CharField(max_length=20)
  blurb = models.CharField(max_length=20)
  created = models.DateTimeField(auto_now_add=True)
  updated = models.DateTimeField(auto_now=True)
  
 class Mymodel2(moels.Model):
  name = models.ForeignKey(Mymdoel1, on_delete=models.CASCADE)
  somethingelse = models.CharField(max_length=20)

В моих запросах передается id из Mymodel1, и мой шаблон возвращает данные, но я также хочу, чтобы шаблон возвращал данные из моей модели2

def get_details(request ,id):
if User.is_authenticated:
    try:
        single_record = Mymodle1.objects.get(id=id)
        details = Mymodel2.objects.get(id=single_record.name)
    except Exception as e:
        raise e
    context = {
        'single_asset': single_asset,
        'details': details,
    }
    return render(request, 'detail.html', context=context)
else:
    return render(request, 'home.html')

но я не могу заставить представление возвращать детали.

Как мы заметили в комментариях, здесь вы неправильно назвали свой запрос details:

details = Mymodel2.objects.get(id=single_record.name)

Причина в том, что вы запрашивали id модели (которая почти в каждом случае является числом, int, big int и т.д...) с атрибутом имени записи. То есть id=single_record.name это не может работать.

Чтобы исправить это, вы можете посмотреть на имена отношений вашей модели FK для атрибутов между Mymodel1 и Mymodel2. В этом случае, если вы вызовете ваш размещенный single_record, вы увидите:

single_record = Mymodle1.objects.get(id=id)

Поскольку в Mymodel1 есть attr name в Mymodel2 для отношений FK, вы можете найти их, изменив запрос details следующим образом:

details = Mymodel2.objects.get(name=single_record)

Или если вы хотите использовать id (при условии, что ваш пк называется id):

details = Mymodel2.objects.get(name__id=single_record.pk)

Или вы можете использовать обратные отношения для Mymodel1 к Mymodel2. Django по умолчанию дает вам related_name в качестве ModelName, ниже, за которым следует _set, поэтому, поскольку у вас нет related name, вы можете сделать:

details = single_record.mymodel2_set.all()

Вернуться на верх