DeleteView有2个论点和用户 [英] DeleteView with 2 arguements post and user

查看:89
本文介绍了DeleteView有2个论点和用户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个删除视图,其中有 2 个条件为 post和 user。

I have a delete view with 2 conditions "post" and "user".

<$ c满足了用户要求$ c> self.object.user = self.request.user ,发布要求由 slug = self.kwargs ['slug'] 满足(我认为这可能是罪魁祸首)

The user requirement is fulfilled by self.object.user = self.request.user and post requirement is fulfilled by slug = self.kwargs['slug'](I think this may be the culprit)

我的观点正确吗?

我对 python ,请原谅任何愚蠢的错误。

I am new to python please forgive any silly mistakes.

Views.py

class ProofDelete(LoginRequiredMixin, DeleteView):
    model = Proof

    def delete(self, *args, **kwargs):
        return super().delete(*args, **kwargs)

    def get_success_url(self, *args, **kwargs):
        slug = self.kwargs['slug']
        print(slug)
        obj = get_object_or_404(Post, slug=slug)
        url_ = obj.get_absolute_url()
        user = self.request.user
        if user.is_authenticated():
            if user in obj.made.all():
                obj.made.remove(user)
            else:
                obj.made.add(user)
        return url_

models.py

models.py

User = get_user_model() 
class Proof(models.Model):
    user = models.ForeignKey(User, related_name='proofmade')
    post = models.ForeignKey(Post, related_name='proofmade')
    made_at = models.DateTimeField(auto_now=True)
    image_of_proof= models.ImageField()
    proof_ = models.ImageField()
    suggestions = models.TextField(max_length=1000)

def __str__(self):
    return self.post.title

urls.py

    app_name = 'proof'

    urlpatterns = [

        url(r'^new_proof/(?P<slug>[-\w]+)/$', views.ProofCreate.as_view(), name='new_proof'),

        url(r'^proof_delete/(?P<pk>\d+)/$', views.ProofDelete.as_view(),name='proof_delete'),

也尝试过

url (r'^proof_delete/(?P<slug>[-\w]+)/(?P<pk>\d+)/$', views.ProofDelete.as_view(), name='proof_delete'),

我得到以下错误。指示视图中的错误

I get the below error. Indicating error in the views

错误消息单击以查看错误消息

Same error message after scrolling down. Click to open

推荐答案

答案在模板中。在 if语句之后添加forloop解决了该问题。这样做可以处理Url的两个参数。 post模型的 slug和 proof模型的 pk。没有forloop几乎不可能满足URL的两个参数

The answer was in the templates. Adding a forloop after the "if" statement solved the issue. Doing this handles both arguments of the Url. "slug" of "post" model and "pk" of the "proof" model. Without the forloop It was almost impossible to satisfy both arguments of the URL

感谢 Paulo Almeida,正确的网址

The correct Url thanks to "Paulo Almeida"

url (r'^proof_delete/(?P<slug>[-\w]+)/(?P<pk>\d+)/$', views.ProofDelete.as_view(), name='proof_delete') 

下面是模板

{% if user in post.made.all %}
    {% for proof in user.proofmade.all %}
        <a href="{% url 'proof:proof_delete' slug=post.slug pk=proof.pk %}">
            <img src="{% static 'images/thumbs_up_RED.png' %}" height="25px">
        </a><br/>
    {% endfor %}
{% else %}
    <a href="{% url 'proof:new_proof' slug=post.slug %}">
        <img src="{% static 'images/thumbs_up_BLANK.png' %}" height="25px">
    </a><br/>
{% endif %}

这篇关于DeleteView有2个论点和用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆