【问题标题】:"def save" - Detect if a field is completely blank - Django“def save” - 检测字段是否完全空白 - Django
【发布时间】:2021-09-26 03:29:08
【问题描述】:

在我的 Django 模型中,我有一个 def 保存功能。我需要这个函数来查看一个字段是否完全留空。我需要它来查看是否每个条目都将字段留空,然后将某些内容返回到 HTML 文件。我将在下面附上我的代码,但我真的很难过。我不确定如何在该函数中设置一个值并将其一直获取到我的 HTML。有没有更简单的方法?

models.py

class Data_Repo1(models.Model):
    user = models.ForeignKey(User, default=True, related_name="Data_Repo1", on_delete=models.PROTECT)
    date1 = models.DateField(blank=True, null=True)
    date2 = models.DateField(blank=True, null=True)

    class Meta:
        ordering = ['-pk']

    def __str__(self):
        return self.date1 or 'None'

    def get_absolute_url(self):
        return reverse('repo1')

    def save(self, *args, **kwargs):
        if self.date1 is None:
            #Something Here - "self.date1 = NONE"
        else:
            return
        if self.date2 is None:
            #Something Here - "self.date2 = NONE"
        else:
            return

        super().save(*args, **kwargs)  # Call the "real" save() method.

views.py

def repo1(请求): 上下文 = {}

context['Add_Repo'] = Add_Repo.objects.filter(user=request.user)
context['Data_Repo1'] = Data_Repo1.objects.filter(user=request.user)
context['Field_Repo1'] = Field_Repo1.objects.filter(user=request.user)

if self.date1 is None: #NOT WORKING
    print('TEST') #NOT WORKING

return render(request, 'sheets/list_repo/repo1.html', context)

HTML

{% for post in Data_Repo1 %}
        {% if date1 == 'NONE' %}
            <h1>ITS HERE</h1>
        {% endif %}
        <tr>
            <td><div><a href="{% url 'update_extinguisher' pk=post.pk %}" style="color: black;">{% if post.date1 %}{{ post.date1 }}{%else%}<span style="color: transparent;">None</span>{%endif%}</a></div></td>
            <td><div><a href="{% url 'update_extinguisher' pk=post.pk %}" style="color: black;">{% if post.date2 %}{{ post.date2 }}{%else%}<span style="color: transparent;">None</span>{%endif%}</a></div></td>
        </tr>
    {% endfor %}

谢谢!

【问题讨论】:

  • 嗨@RussellHertel。您已经正确定义了 models 并在 views.py 中检索值并使用 Django 模板语言在 HTML 中迭代。只有您的 HTML 中的这一段不正确{% if date1 == 'NONE' %} 要更正它,您可以使用{% if post.date1 == 'NONE' %}
  • @AhemdAblak 我收到错误“名称'self'未定义”它指的是我的views.py。由于这是我在 HTML 中的 for 循环,因此它不会一次只检查每一个,如果它是空白的,则不返回任何内容。我需要先遍历所有这些字段以查看所有该字段是否为空白,然后如果该字段为空白,则将值返回到我的 HTML。这会这样做吗?我的视图中是否需要一个 for 循环?谢谢
  • 嗨@RussellHertel,您已经在{% for post in Data_Repo1 %} 的html 中进行迭代。对于您在views.py 中收到的self 错误,您可以将if self.date1 is None: 替换为if context['Data_Repo1'].data1 is None:
  • @AhmedAblak 所以我们真的很亲密。我进行了更改,但现在出现错误“'QuerySet' 对象没有属性'data1'”。另外,我在 if 语句中放入什么来检测每个条目的字段是否为空并返回一个值?
  • 嗨@RussellHertel,错误是因为拼写错误data1 应该是date1。在if context['Data_Repo1'].data1 is None: 中,对于空字段检测,根据您的模型,它将是一个空白,因此,您可以使用以下内容来验证空字段:if context['Data_Repo1'].data1 == "": 我将添加带有示例的答案以进行更多说明。

标签: django django-models field


【解决方案1】:

请对您的代码进行以下小修改,以涵盖对空日期的验证并遍历 repos 列表:

context['Add_Repo'] = Add_Repo.objects.filter(user=request.user)
context['Data_Repo1'] = Data_Repo1.objects.filter(user=request.user)
context['Field_Repo1'] = Field_Repo1.objects.filter(user=request.user)
for repo in context['Data_Repo1']:
    if repo.date1 == "" and repo.date2 == "":
        print("Repo: {} has empty date1 and date2".format(repo.pk))
        continue
    if repo.date1 == "":
        print("Repo: {} has empty date1".format(repo.pk))
        continue
    if repo.date2 == "":
        print("Repo: {} has empty date2".format(repo.pk))

return render(request, 'sheets/list_repo/repo1.html', context)

【讨论】:

    猜你喜欢
    • 2014-04-28
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    相关资源
    最近更新 更多