当前位置: 首页 > 知识库问答 >
问题:

让Django只返回存储为models.TextField()的文本的前50个字符

西门经国
2023-03-14

在Python速成课程第18章中,我们制作了一个学习日志网站。

我不能只返回一个字符的前50个字符

from django.db import models
from django.contrib.auth.models import User

class Topic(models.Model):
    """A topic the user is learning about"""
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        """Return a string representation of the model."""
        return str(self.text)

class Entry(models.Model):
    """Something specific learned about a topic"""
    topic = models.ForeignKey(Topic, on_delete=models.PROTECT)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = 'entries'

    def __str__(self):
        """Return a string representation of the model."""
        if len(self.text) > 50:
            return f"{str(self.text)[:50]}..."
        else:
            return f"{str(self.text)}"

我是否包含if len(self.text)也是一样的

  1. 我在_delete=models.PROTECT上使用了,因为我知道CASCADE会导致一些奇怪的问题,比如意外删除了一些您不想删除的内容

是不是因为models.TextField()函数导致了这种情况?我是否必须进行str()转换才能使self.text变量“可订阅”?


共有2个答案

熊朝
2023-03-14

根据我看到的,你可以说

def __str__(self):
    return self.text[:50]

而且

在超文本标记语言形式中调用时可以使用截断字过滤器

您没有显示views.py,但假设您有一个视图,该视图返回到一个页面,其中包含Entry类中的所有条目,您碰巧说{%for Entry in Entries%}您只需添加

{{Entry:text | truncatewords:50}}

{%endfor%}

您可以在文档中了解更多信息

郑伟彦
2023-03-14

在Django 3.0models.TextField中,如果将其称为self.textEntry.text,则返回字符串(str)。所以您不需要调用str()函数。

如果你想得到前50个字符:

def __str__(self):
    return self.text[:50]

在Python中,如果对可订阅对象使用[:50],它将返回对象的前50个部分(如果少于50个部分,则返回全部)。

我希望我的回答能帮助你。

 类似资料:
  • 主类: 我尝试的任何与存储库相关的方法都返回null。有人能帮我提个建议吗?

  • 问题内容: 我想制作一个将读取文本文件并存储每个出现的字符的Java程序。因此它将考虑标点符号,字母,数字,大写,小写等。给定一个文本文件,如: 玫瑰是红色的, 紫罗兰是蓝色的。 打印值将如下所示: R:1 r:3 我:1 ,:1 [ect] 到目前为止,我已经能够读取文件并计算单词,行数和字符数。 我还没有学过哈希图/表或树形图;寻找有关如何使用数组,数组列表或链表存储所有字符类型及其出现的建议

  • NowCoder 题目描述 在一个字符串中找到第一个只出现一次的字符,并返回它的位置。 // Input: abacc Output: b 解题思路 最直观的解法是使用 HashMap 对出现次数进行统计,但是考虑到要统计的字符范围有限,因此可以使用整型数组代替 HashMap,从而将空间复杂度由 O(N) 降低为 O(1)。 // java public int FirstNotRepeat

  • 问题内容: 我想从bash脚本执行python脚本,并且要将python脚本的输出存储在变量中。 在我的python脚本中,我将一些内容打印到屏幕上,最后我返回一个带有以下内容的字符串: 在我的bash脚本中,我执行了以下操作: 但是,当我检查with的值时,我得到了Python脚本打印到屏幕上的所有内容,但 没有 返回值! 我应该怎么做? 编辑:我需要该字符串,因为它告诉我Python脚本创建的

  • 我想做一个java程序,将读取一个文本文件,并存储每一个单一的字符出现。因此,它将解释标点符号,字母,数字,大写,小写等。给定一个文本文件,如: 打印值将如下所示: R:1 r:3