Как установить оператор 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
, поэтому полностью удалите его.