Получить запись из двух моделей Django в одном шаблоне - PullRequest
1 голос
/ 05 октября 2019

Я пытаюсь получить записи из двух моделей Django. Поиск должен быть похож на все записи из первой модели, а затем записи из вторых моделей на основе имени пользователя для первых моделей.

Модели:

class Nodes(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE, default=1)
    node_name = models.CharField(max_length=50)
    node_mob = models.PositiveIntegerField()
    node_image = models.ImageField(upload_to='nodes_pics/', blank=True)

    def __str__(self):
        return self.user.username

class DocchainUser(models.Model):
    docchainuser = models.OneToOneField(User, on_delete = models.CASCADE)
    address = models.CharField(max_length=64,unique=True)   

    def __str__(self):
        return self.address

Представления:

def universityUsers(request):
    queryset = Nodes.objects.all()
    context = {
        'user_list': queryset,
    }
    return render(request,'universityUsers.html',context)

Шаблоны:

{% for p in user_list %}
       <tr>
           <td>{{ forloop.counter }}</td>
           <td>{{ p.node_name }}</td>
           <td>{{ p.user.email }}</td>
           <td>{{ p.node_mob }}</td>
           <td> ADDRESS FROM DOCCHAINUSER MODEL </td>
       </tr>
{% endfor %}

Я хочу получить address из модели DocchainUser на основе имени пользователя из модели Nodes.

Пример: test имя пользователя существует в обеих моделях. Я должен получить запись из обеих моделей для тестового пользователя. И то же самое для всех остальных пользователей.

Как это можно сделать? Я застрял здесь.

Заранее спасибо!

1 Ответ

1 голос
/ 05 октября 2019

Лучше дать related_names реляционным полям. скажем:

docchainuser = models.OneToOneField(User,related_name="doc_user" on_delete = models.CASCADE)

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

result=[]

    for node in Node.objects.all():  

       result.append({"node_name":node.node_name,"email":node.user.email,"address":node.user.doc_user.address})

Результат теперь содержит все данные. Вы можете перебрать в соответствии с вашим требованием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...