首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django:分离两个用户名的问题

Django:分离两个用户名的问题
EN

Stack Overflow用户
提问于 2019-12-05 06:10:27
回答 3查看 57关注 0票数 0

我正在通过构建一个名为TravelBuddies的应用程序来学习Django。它将允许旅行者计划他们的旅行,并保留相关的旅行项目(如预订、机票、护照复印件、保险信息等),并为日常活动创建警报。该应用程序还可以向旅行者更新当地信息,如天气或每日新闻。旅行者也可以与他人分享旅行信息,也可以让人与他们合作,为旅行做计划。

我正面临着一个问题。当我去http://127.0.0.1:8000/triplist/的时候,我看到了这个页面:

当我点击Trip名称:吉隆坡,并通过以下链接进入activity.htmlhttp://127.0.0.1:8000/triplist/kuala-lumpur/

"john“和"williams”是两个独立的用户名。它们需要用逗号(,)分隔。所以看起来是这样的:Co-traveller: john, williams。我该怎么做呢?

这是我在models.py:中的代码

代码语言:javascript
运行
复制
from django.contrib.auth.models import User
from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.

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中的代码

代码语言:javascript
运行
复制
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中的代码

代码语言:javascript
运行
复制
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中的代码

代码语言:javascript
运行
复制
from django.apps import AppConfig


class TripsConfig(AppConfig):
    name = 'trips'

这是我在triplist.html中的代码

代码语言:javascript
运行
复制
<!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>
            Coplanners:
                {% for user in trip.add_coplanner.all %}
                    {{user.username}}
                {% endfor %}<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>

这是我在activity.html:中的代码

代码语言:javascript
运行
复制
{% 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:
                {% for user in trip_item.add_cotraveller.all %}
                    {{user.username}}
                {% endfor %}<br>
<!--    Co-traveller: {{ trip_item.add_cotraveller.all }}-->
</ol>
{% endfor %}

{% endblock %}

我必须对models.py做任何修改吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-05 06:17:58

代码语言:javascript
运行
复制
Co-traveller:
                {% for user in trip_item.add_cotraveller.all %}
                    {% if forloop.last %}
                    {{user.username}}
                    {% else %}
                     {{user.username}} , 
                    {% endif %}
                {% endfor %}<br>

你可以用这个。在,之后一定要留出空间

票数 2
EN

Stack Overflow用户

发布于 2019-12-05 06:17:41

可以用逗号分隔用户,如下所示:

代码语言:javascript
运行
复制
        Co-traveller:
            {% for user in trip_item.add_cotraveller.all %}
                {{user.username}}{% if not forloop.last %}, {% endif %}
            {% endfor %}<br>
票数 1
EN

Stack Overflow用户

发布于 2019-12-05 13:35:33

另一种方法是创建一个实例方法并从模型中返回一个字符串。就像。

代码语言:javascript
运行
复制
class Activity(models.Model):
    #fields
    add_cotraveller = models.ManyToManyField(User)

    def __str__(self):
        return self.activity_name

    def get_cotravellers(self):
        return ", ".join(u.username for u in self.add_coplanner.all())

在模板中,您可以访问它,例如:

代码语言:javascript
运行
复制
Coplanners: {{ trip_item.get_cotravellers }}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59189229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档