python - 显示模型输出的问题.ManyToManyField(User)
问题描述
我正在通过构建一个名为 TravelBuddies 的应用程序来学习 Django。它将允许旅行者计划他们的旅行并保留相关的旅行项目(如预订、机票、护照复印件、保险信息等),并为日常活动创建警报。该应用程序还将能够向旅行者更新当地信息,例如天气或每日新闻。旅行者还可以与某人分享旅行信息,或让某人与他们合作计划旅行。
我面临一个问题。我通过 Django 管理员为吉隆坡添加了两项活动。他们是“去植物园”和“去水族馆”。
当我去http://127.0.0.1:8000/triplist/,我看到这个页面:
如您所见,在 Co-planner 字段中,用户的名称显示为<QuerySet [<User: williams>]
>。但它应该显示为Co-planner: williams
。
当我点击Trip Name: Kuala Lumpur并转到http://127.0.0.1:8000/triplist/kuala-lumpur/时,也会出现同样的问题:
这是我的代码models.py
:
from django.contrib.auth.models import User
from django.db import models
# Create your models here.
from django.template.defaultfilters import slugify
class Trip(models.Model):
trip_name = models.CharField(max_length=100)
date = models.DateField()
planner_name = models.CharField(max_length=100)
add_coplanner = models.ManyToManyField(User)
slug = models.SlugField(max_length=150, default='null')
def __str__(self):
return self.trip_name
def save(self, *args, **kwargs):
self.slug = slugify(self.trip_name)
super().save(*args, **kwargs)
class Activity(models.Model):
trip = models.ForeignKey(Trip, on_delete=models.CASCADE)
activity_name = models.CharField(max_length=100)
date = models.DateField(auto_now=True)
time = models.TimeField(auto_now= True)
location = models.CharField(max_length=100)
item_type = models.CharField(max_length=100)
item_number = models.CharField(max_length=100)
add_cotraveller = models.ManyToManyField(User)
slug = models.SlugField(max_length=150, default='null')
def __str__(self):
return self.activity_name
def save(self):
super(Activity, self).save()
self.slug = '%i-%s' % (
self.id, slugify(self.trip.trip_name)
)
super(Activity, self).save()
这是我的代码views.py
:
from django.views import generic
from .models import Trip, Activity
class TripListView(generic.ListView):
template_name = 'trips/triplist.html'
context_object_name = 'all_trips'
def get_queryset(self):
return Trip.objects.all()
class ActivityView(generic.DetailView):
model = Trip
template_name = 'trips/activity.html'
这是我的代码urls.py
:
from . import views
from django.urls import path
app_name = 'trips'
urlpatterns = [
path('triplist/', views.TripListView.as_view(), name='triplist'),
path('triplist/<slug:slug>/', views.ActivityView.as_view(), name='activity'),
]
这是我的代码apps.py
:
from django.apps import AppConfig
class TripsConfig(AppConfig):
name = 'trips'
这是我的代码triplist.html
:
<!DOCTYPE html>
{% extends 'trips/base.html' %}
{% load static %}
<html lang="en">
<link rel="stylesheet" type="text/css" href="{% static "css/style.css" %}">
<head>
<meta charset="UTF-8">
{% block title%}Trip list{% endblock %}
<title>Trip list</title>
</head>
<body>
{% block content %}
<!--Page content-->
<h1>This is Trip List Page</h1>
<ol>
{% for trip in all_trips %}
<ol>
<li><a href="{% url 'trips:activity' trip.slug %}">Trip name: {{ trip.trip_name }}</a></li>
Date: {{ trip.date }}<br>
Planner: {{ trip.planner_name }}<br>
Co-planner: {{ trip.add_coplanner.all }}<br>
</ol>
{% endfor %}
</ol>
<img src="{% static "images/botanical-garden.jpg" %}" alt="Botanical Garden" />
<!-- New line -->
{% endblock %}
</body>
</html>
</html>
这是我的代码activity.html
:
{% extends 'trips/base.html' %}
{% block title%}
Detail
{% endblock %}
{% block content %}
<h3>Activities for {{trip.trip_name}} </h3>
{% for trip_item in trip.activity_set.all %}
<!--<p>Activity name: {{ trip_item.activity_name }}</p>-->
<ol>
<li>Activity name: {{ trip_item.activity_name }}</li>
Date: {{ trip_item.date }}<br>
Time: {{ trip_item.time }}<br>
Location: {{ trip_item.location }}<br>
Item Type: {{ trip_item.item_type }}<br>
Item No: {{ trip_item.item_number }}<br>
Co-traveller: {{ trip_item.add_cotraveller.all }}
</ol>
{% endfor %}
{% endblock %}
triplist.html 和 activity.html 有什么问题吗?
更新 1:顺便说一句,我add_coplanner = models.ManyToManyField(User)
从这个链接中得到了这段代码的想法:Auth.User.None 在渲染 ManyToManyField 时。
问这个问题的人也和我一样面临同样的问题。他得到了类似的东西<User: gg>]>
。建议他重写str () 方法。但我不明白该怎么做。
解决方案
嗨,在“活动”模型中添加这个
def get_cotravellers(self):
return " , ".join([x.username for x in self.add_cotraveller.all()])
在模板中称其为{{ trip_item.get_cotravellers }}
推荐阅读
- elasticsearch - Elasticsearch with query => 1 Doc with array of 2 values Return 2 hits
- r - match.arg(position) 中的错误:'arg' 必须为 NULL 或 Rstudio 中的字符向量
- android - 保持安卓蓝牙音频连接处于“正在播放”状态
- python - 需要帮助将列表存储为表格并通过页面迭代抓取
- python-3.x - 育儿伙伴返回 google code jam 输出中的错误
- python - 如何聚合(总和、平均值等)值并基于此创建新的 Pandas 数据框?
- c - 使用不同的实现时如何编写相同的客户端文本?
- python - 用来自 csv 的数据填充 word 模板。Python
- firebase - 使用 GCP API-Gateway 和 Firebase Auth 保护 App-Engine 后端
- python - 从 json 获取数据