Чтобы изменить отображение в зависимости от наличия или отсутствия данных - PullRequest
0 голосов
/ 15 апреля 2019

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 голосов
/ 15 апреля 2019

Я думаю, что это должно быть так:

{% 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 %}

Поскольку Mymodel и User имеют отношение OneToOne , поэтому вы можете получить значение Mymodel, используя:

user.mymodel  # class name all lower case

А также получить пользовательские данные из моей модели, используя:

mymodel = Mymodel.objects.get(id=1)
mymodel.user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...