Как установить оператор if в True в шаблоне Django?

У меня есть Django-форма, которая соответствует модели и позволяет пользователю добавить или удалить элемент из его списка часов. Я хочу, чтобы кнопка отправки говорила "Add to Watchlist", если пользователь не добавил элемент в свой список, и "Remove from Watchlist", если объявление уже находится в списке. В настоящее время кнопка говорит "Удалить из списка наблюдения" (независимо от того, был ли он добавлен или нет) и меняется на "Добавить в список наблюдения" после того, как она была нажата один раз. После этого кнопка не изменяется.

html

<form action = "{% url 'listing' auction_listing.id %}" method = "POST">
        {% csrf_token %}
        {{ watchlistForm }}
        {% if watchlist %}
            <input type = "submit" value = "{{ watchlist }}">
        {% else %}
            <input type = "submit" value = "Remove from Watchlist">
        {% endif %}
    </form>

views.py

models.py

class Listings(models.Model):
    CATEGORY = [
    ("Miscellaneous", "Miscellaneous"),
    ("Movies and Television", "Movies and Television"),
    ("Sports", "Sports"),
    ("Arts and Crafts", "Arts and Crafts"),
    ("Clothing", "Clothing"),
    ("Books", "Books"),
]
    title = models.CharField(max_length=64)
    description = models.CharField(max_length=500)
    bid = models.DecimalField(max_digits=1000000000000, decimal_places=2)
    image = models.URLField(null=True, blank=True)
    category = models.CharField(max_length=64, choices=CATEGORY, default=None)
    user = models.ForeignKey(User, on_delete=models.CASCADE, default="")

class Comments(models.Model):
    listing = models.ForeignKey(Listings, on_delete=models.CASCADE, default="")
    user = models.ForeignKey(User, on_delete=models.CASCADE, default="")
    comment = models.CharField(max_length=500)

class Bids(models.Model):
    listing = models.ForeignKey(Listings, on_delete=models.CASCADE, default="")
    user = models.ForeignKey(User, on_delete=models.CASCADE, default="")
    bid = models.DecimalField(max_digits=1000000000000, decimal_places=2)

class WatchList(models.Model):
    listings = models.ManyToManyField(Listings)
    user = models.ForeignKey(User, on_delete=models.CASCADE, default="")
    add_to_watchlist = models.BooleanField(default=False)

class CloseListing(models.Model):
    listings = models.ForeignKey(Listings, on_delete=models.CASCADE, default="")
    user = models.ForeignKey(User, on_delete=models.CASCADE, default="")
    close_listing = models.BooleanField(default=False, null=False)

Попробуйте это:

<form action = "{% url 'listing' auction_listing.id %}" method = "POST">
    {% csrf_token %}
    {{ watchlistForm }}
    {% if auction_listing.add_to_watchlist == True %}
        <button type="submit">Remove From Watchlist</button>  //You may use input instead of button here, I just use button for customizability
    {% elif auction_listing.add_to_watchlist == False %}
        <button type="submit">Add to Watchlist</button>
    {% endif %}
</form>

У меня есть другой подход, путем создания listing поля ForeignKey в WatchList модели и нет необходимости делать add_to_watchlist поле.

models.py

class WatchList(models.Model):
    listing = models.ForeignKey(Listings, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE, default='')

admin.py

from some_app_name.models import WatchList
@admin.register(WatchList)
class WatchListAdmin(admin.ModelAdmin):
    list_display = ['id', 'listing', 'user']

listing.html или файл шаблона:

<form action = "{% url 'listing' auction_listing.id %}" method = "POST">
    {% csrf_token %}
    {% if watchlist %}
        <input type="submit" value='Remove from watchlist' name='remove'>
    {% else %}
        <input type="submit" value='Add to watchlist' name='add'>
    {% endif %}
</form>

views.py

Кроме того, нет необходимости делать WatchListForm, поэтому полностью удалите его.

Вернуться на верх