django - 如何从 django 中的模型对象中获取数据
问题描述
我正在使用 Tweepy 发布来自 Django 管理员的推文。如图所示,如何从模型对象中检索“标题”和“图像”,每当我单击推文按钮时,它应该在我的 Twitter 帐户上发布一条推文,标题为文本和图像。
示例:假设我有 4 个模型对象,每个对象都有一个标题和一个图像,我只想获取我想在 Twitter 上发布的那个对象的标题和图像。
我可以做的一件事是传递该特定模型对象的主键或 id,但我不知道如何在下面的模板中传递它。
#template
{% extends 'admin/change_form.html' %}
{% load i18n %}
{% block content %}
{{ block.super }}
<form action="{% url 'post_tweet' %}" method="POST">
{% csrf_token %}
<input type="submit" value="Tweet" name="add_tweet">
</form>
{% endblock %}
#urls.py
urlpatterns = [
path('', views.Home.as_view(), name="home"),
path('$', views.tweet, name="post_tweet"),
]
#models.py
class Movie(models.Model):
GENRE = (
('Action', 'Action'),('Adventure', 'Adventure'),('Comedy', 'Comedy'),
('Crime', 'Crime'),('Drama', 'Drama'),('Fantasy', 'Fantasy'),
('Horror', 'Horror'),('Mystery', 'Mystery'),('Science Fiction', 'Science Fiction'),
('Superhero', 'Superhero'),('Thriller', 'Thriller'),('War','War'),('Others','Others')
)
image = models.ImageField(upload_to="images/",blank=True, default="default-image.png",null=True)
title = models.CharField(max_length=50, unique=True)
slug = models.SlugField(max_length=100, allow_unicode=True, unique=True, default='',blank=True)
genre = models.CharField(max_length=30, choices=GENRE)
description = models.TextField(max_length=500, blank=True)
def __str__(self):
return self.title
def save(self, *args, **kwargs):
self.slug = slugify(self.title)
super().save(*args,**kwargs)
class Meta:
ordering = ["-title"]
# views.py
def tweet(request):
if request.method == "POST":
twitter_auth_keys = {
"consumer_key" : "XXX",
"consumer_secret" : "XXX",
"access_token" : "XXX",
"access_token_secret" : "XXX"
}
auth = tweepy.OAuthHandler(
twitter_auth_keys['consumer_key'],
twitter_auth_keys['consumer_secret']
)
auth.set_access_token(
twitter_auth_keys['access_token'],
twitter_auth_keys['access_token_secret']
)
api = tweepy.API(auth)
`Do something here`
tweet = "New"
post_result = api.update_status(status=tweet)
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
解决方案
您可以在模板中打印object_id值,该值默认由change_view方法传递,如果您也想将额外数据传递给 change_view 模板,则始终可以覆盖此方法:https ://docs.djangoproject.com/ en/3.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin.change_view
所以一种做你想做的事情的方法是,你可以在隐藏的输入中打印 object_id,这样该值将通过表单提交传递给你的视图:
{% extends "admin/change_form.html" %}
{% load i18n admin_urls %}
{% block content %}
{{ block.super }}
<form action="{% url 'post_tweet' %}" method="POST">
{% csrf_token %}
<input type="hidden" name="movie_id" value="{{ object_id }}">
<input type="submit" value="Tweet" name="add_tweet">
</form>
{% endblock %}
现在,您可以通过搜索其 id 来获取该对象的实例并在您的推文视图中获取电影的标题和图像。
推荐阅读
- ios - Pod install 未在 Flutter 应用程序中安装 Pod
- c# - 是否可以在 C# Roslyn 代码生成中引用现有源文件?
- xml - 显示修改日期的 Blogger/Blogspot 条件
- python - 如何使用 Python 将 Confluence 页面连同内容从一个空间移动到另一个空间?
- facebook - 在不提交应用程序的情况下在 facebook 上获取 user_birthday 的访问权限?
- html - 如何将 HTML 转换为 JSX (React.js)
- python - ibm_db、pyinstaller、DLL 问题
- reactjs - Gatsby 与 React 挂钩砖石 - 我可以加载具有纵横比的媒体吗?
- javascript - React 会多次导入同一个包吗?
- amazon-web-services - 从 Azure Site Recovery 故障回复到 AWS