Django 学习笔记

Bugs 解决记录

django.template.exceptions.TemplateDoesNotExist

StackOverflow

dash 符号命令问题

前端:

1
<input type="text" name="search-area" value="{{search_input}}">

后端:

1
context['search_input'] = search_input

上面这样是对的,但是如果把下划线 _ 换成 - 就会出错。这个应该是命名规范的问题。

Django 重命名项目名(根目录)

这里使用的开发工具是 VSCode。

我们在修改根目录名称和根目录下的同名文件夹之后,我们可以利用 VSCode 的全局替换把所有的旧文件名给新文件名即可。

Django 查询子类问题

models 中的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Project(models.Model):
# owner = models.ForeignKey('auth.User', related_name='projects', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
description = models.TextField(null=True, blank=True)
# featured_image =
demo_link = models.CharField(max_length=1000, null=True, blank=True)
source_link = models.CharField(max_length=1000, null=True, blank=True)
vote_totle = models.IntegerField(default=0)
vote_ratio = models.IntegerField(default=0)
tags = models.ManyToManyField('Tag', blank=True)
created = models.DateTimeField(auto_now_add=True)
id = models.UUIDField(default=uuid.uuid4, unique=True,
primary_key=True, editable=False)

def __str__(self) -> str:
return self.title


class Review(models.Model):

VOTE_TYPE = (
('up', 'up'),
('down', 'down'),
)

# owner
project = models.ForeignKey(
Project, on_delete=models.CASCADE, null=True, blank=True)
body = models.TextField(null=True, blank=True)
value = models.CharField(max_length=50, choices=VOTE_TYPE)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
id = models.UUIDField(default=uuid.uuid4, unique=True,
primary_key=True, editable=False)

def __str__(self) -> str:
return self.value

这里是想要以 Project 来查询 reveiw,其实 ProjectReview 的外键,这里查询的语法比较特殊,和 tags 这种多对多的查询是不一样的,正确的语句如下:

1
2
3
4
5
6
def project(request, pk):
projectObj = Project.objects.get(id=pk)
tags = projectObj.tags.all() # 查询 tags
reviews = projectObj.review_set.all() # 查询 reviews
context = {'project': projectObj, 'tags': tags, 'reviews': reviews}
return render(request, 'projects/single-project.html', context)

其实,我们可以设置一下外键的 related_name,就可以像查询 tags 一样查询 reviews 了:

1
2
project = models.ForeignKey(
Project, on_delete=models.CASCADE, null=True, blank=True, related_name='reviews')
1
reviews = projectObj.reviews.all()

Some 知识点

关于 form 表单,如果 action 的值为空的话,那么 POST 提交的东西会被提交到当前的 URL,即会被送到当前的 URL 对应的 views 中的方法进行处理。

1
2
<form method="POST" action="">
</form>

版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!