【问题标题】:How to get data from model objects in django如何从 django 中的模型对象中获取数据
【发布时间】:2021-02-14 05:51:46
【问题描述】:

我正在使用 Tweepy 从 Django 管理员发布推文。如图所示,如何从模型对象中检索“标题”和“图像”,每当我单击推文按钮时,它应该在我的 Twitter 帐户上发布一条推文,标题为文本和图像。

示例:假设我有 4 个模型对象,每个对象都有一个标题和一个图像,我只想获取我想在 Twitter 上发布的那个对象的标题和图像。

我可以做的一件事是传递该特定模型对象的主键或 ID 但我不知道如何在下面的模板中传递它。

Django Admin Form page

#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'))

【问题讨论】:

  • 在没有看到模型定义的情况下无法提供具体答案。发布您的型号代码
  • @RedgrenGrumbholdt 我已经更新了问题请检查一下。

标签: django django-views django-admin django-queryset


【解决方案1】:

您可以在模板中打印 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 来获取该对象的实例并在您的推文视图中获取电影的标题和图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2017-10-27
    • 2011-03-24
    • 2020-09-19
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    相关资源
    最近更新 更多