在 Django 中,我如何遍历父模型(用户)中的特定字段,包括附加子模型(用户配置文件)中的一些特定字段
In django how can I loop through specific fields in the parent model (user) including some specific fields in the attached child model (userprofile)
我的模板中有一个 table,对于 User
模型中的每个用户,我想遍历他们的 username
、phone
、& email
。我还想从 Profile
模型中包含用户的 age
、state
、& address
.
我的模型 类 在 models.py
:
class User(models.Model):
...
username = models.CharField(max_length=100, null=True)
phone = models.CharField(max_length=20, null=True)
email = models.EmailField(max_length=100, blank=True, null=True)
password = models.CharField(max_length=100, null=True)
...
class Profile(models.Model):
...
users = models.OneToOneField(User, on_delete=models.CASCADE, blank=True, null=True, related_name='userprofile')
age = models.PositiveIntegerField(blank=True, null=True)
state = models.CharField(max_length=20, null=True)
address = models.CharField(max_length=200, null=True)
profile_pic = models.ImageField(upload_to='profile_pics/', null=True)
...
我在 views.py
中的观点:
...
def registeredUsers(request):
users = User.objects.all()
context = {'users': users}
return render(request, 'users.html', context)
...
我的模板包含以下 table 内容:
...
</tbody>
{% for i in users %}
<tr>
<td>{{ i.username }}</td>
<td>{{ i.phone }}</td>
<td>{{ i.email }}</td>
<td>{{ i.age}}</td>
<td>{{ i.state}}</td>
<td>{{ i.address}}</td>
</tr>
{% endfor %}
</tbody>
...
模板仅显示 User
模型中的字段,我如何定义视图函数以确保 User
模型使用它拉取 Profile 模型的字段?
我注意到你的 Profile
模型有用户字段,它是与 User
模型的 OneToOneRelation。
所以你可以这样循环:
...
</tbody>
{% for i in users %}
<tr>
<td>{{ i.username }}</td>
<td>{{ i.profile.age }}</td>
<th>{{ i.profile.state }}</th>
<th>{{ i.profile.address }}</th>
<th>{{ i.phone }}</th>
<th>{{ i.email }}</th>
<td>{{ i.age}}</td>
<td>{{ i.state}}</td>
<td>{{ i.address}}</td>
</tr>
{% endfor %}
</tbody>
...
按原样定义模型(我主要是谈论 Profile.user 上的 related_name),在你的 for 循环中写这样的东西:
...
<td>{{ i.userprofile.age }}</td>
...
我的模板中有一个 table,对于 User
模型中的每个用户,我想遍历他们的 username
、phone
、& email
。我还想从 Profile
模型中包含用户的 age
、state
、& address
.
我的模型 类 在 models.py
:
class User(models.Model):
...
username = models.CharField(max_length=100, null=True)
phone = models.CharField(max_length=20, null=True)
email = models.EmailField(max_length=100, blank=True, null=True)
password = models.CharField(max_length=100, null=True)
...
class Profile(models.Model):
...
users = models.OneToOneField(User, on_delete=models.CASCADE, blank=True, null=True, related_name='userprofile')
age = models.PositiveIntegerField(blank=True, null=True)
state = models.CharField(max_length=20, null=True)
address = models.CharField(max_length=200, null=True)
profile_pic = models.ImageField(upload_to='profile_pics/', null=True)
...
我在 views.py
中的观点:
...
def registeredUsers(request):
users = User.objects.all()
context = {'users': users}
return render(request, 'users.html', context)
...
我的模板包含以下 table 内容:
...
</tbody>
{% for i in users %}
<tr>
<td>{{ i.username }}</td>
<td>{{ i.phone }}</td>
<td>{{ i.email }}</td>
<td>{{ i.age}}</td>
<td>{{ i.state}}</td>
<td>{{ i.address}}</td>
</tr>
{% endfor %}
</tbody>
...
模板仅显示 User
模型中的字段,我如何定义视图函数以确保 User
模型使用它拉取 Profile 模型的字段?
我注意到你的 Profile
模型有用户字段,它是与 User
模型的 OneToOneRelation。
所以你可以这样循环:
...
</tbody>
{% for i in users %}
<tr>
<td>{{ i.username }}</td>
<td>{{ i.profile.age }}</td>
<th>{{ i.profile.state }}</th>
<th>{{ i.profile.address }}</th>
<th>{{ i.phone }}</th>
<th>{{ i.email }}</th>
<td>{{ i.age}}</td>
<td>{{ i.state}}</td>
<td>{{ i.address}}</td>
</tr>
{% endfor %}
</tbody>
...
按原样定义模型(我主要是谈论 Profile.user 上的 related_name),在你的 for 循环中写这样的东西:
...
<td>{{ i.userprofile.age }}</td>
...