根据是否存在数据来更改显示

时间:2019-04-15 02:59:36

标签: django python-3.x

Django2.1

我想创建一个按钮,该按钮将在用户过去保存数据时显示。 我以为可以用{%if object%}来完成,但这似乎有所不同。

这是失败的代码。

{% if user.is_authenticated %}
    {% if object %}
     <a class="btn" href="{% url 'detail' user.id %}">Check</a>
    {% else %}
     <a class="btn" href="{% url 'create' %}">Create</a>
    {% endif %}
{% else %}
#models.py
class Mymodel(models.Model):
    user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
    title = models.CharField(max_length=20)
    content = models.TextField(max_length=5000)
    posted_date = models.DateTimeField(auto_now=True)

我将在CreateView中创建数据。

class MyCreateView(LoginRequiredMixin, CreateView):
    model = Mymodel
    form_class = MyForm

    def form_valid(self, form):
        obj = form.save(commit=False)
        obj.user = self.request.user
        return super(MyCreateView, self).form_valid(form)

    def get_success_url(self):
        return reverse_lazy('detail', kwargs={"pk": self.object.pk})

感谢您阅读本书直到最后。

1 个答案:

答案 0 :(得分:0)

我认为应该是这样的:

{% if user.is_authenticated %}
    {% if user.mymodel %}
     <a class="btn" href="{% url 'detail' user.id %}">Check</a>
    {% else %}
     <a class="btn" href="{% url 'create' %}">Create</a>
    {% endif %}
{% else %}

由于MymodelUser具有OneToOne关系,因此您可以使用以下方法获取Mymodel值:

user.mymodel  # class name all lower case

还可以使用以下方法从我的模型中获取用户数据:

mymodel = Mymodel.objects.get(id=1)
mymodel.user