Django - 如何在views.py中访问实例的值

Posted

技术标签:

【中文标题】Django - 如何在views.py中访问实例的值【英文标题】:Django - How access the value of an instance in views.py 【发布时间】:2021-06-28 02:06:43 【问题描述】:

我有这个模型

class Post(models.Model):
    title = models.CharField(max_length=100)
    title2 = models.CharField( max_length=100)
    content = models.TextField(default=timezone.now)
    content2 = models.TextField(default=timezone.now)
    post_image = models.ImageField(upload_to='post_pics')
    post_image2 = models.ImageField(upload_to='post2_pics')
    date_posted = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

然后我有了这个简单的视图函数,它允许我在我的 html 中访问它的每个字段:

def home(request):


    postings = 
        'listings' : Post.objects.all(),
        
    
    return render(request, 'front/front.html',  postings)
% for listings in listings%
  <h1>listings.content</h1>
% endfor %

有了这个,我可以访问该模型的每个实例的 content 字段并显示它

我的问题是如何访问我的视图函数中的content 字段并进行更改。 content 字段包含一个邮政编码,我想使用 API 来显示该邮政编码所在的城市(我已经知道该怎么做)并将其传递回 h1 标记。每个实例都有一个唯一的邮政编码,所以我需要它来申请每个实例。我该如何处理?

【问题讨论】:

您不应该为迭代变量和被迭代的变量使用相同的名称。试试% for listing in listings% 【参考方案1】:

最简单的方法是创建另一个变量(来自视图),它为相应的邮政编码找到城市,并通过上下文字典将其发送到模板。 添加模型城市设置默认值和 Null ,稍后根据输入的密码您可以将值设置为模型的城市属性..

如果要将 CONTENT 的值编辑为城市名称...那么,

最好的方法是覆盖保存方法并在那里设置值,

models.py:

class Post(models.Model):
    ...
    def save(self, *args, **kwargs):
       self.content = API_VALUE_OF_city_name
       super(Post, self).save(*args, **kwargs)

如果你想从视图中更新它,

在 views.py 中:

instance_update = Post.objects.filter(id = <pk of Post>).update(content = NEWLY FOUND CITY NAME)

【讨论】:

以上是关于Django - 如何在views.py中访问实例的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 中声明一个数据库驱动的字典,该字典可在模板中全局访问,而不依赖于 views.py

如何在 Views.py 中运行子进程——Django

如何在 Django 中重复调用 views.py 中的函数?

如何在 django views.py 中随机播放列表?

Django:如何通过views.py更改值

如何在 Django 模板中访问字典列表