"def save" - Определите, если поле полностью пустое - Django
В моих моделях Django у меня есть функция def save. Мне нужно, чтобы эта функция проверяла, оставлено ли поле пустым полностью. Мне нужно, чтобы она видела, оставалось ли поле пустым при каждой записи, а затем возвращала что-то в HTML файл. Я приложу свой код ниже, но я действительно в тупике. Я не уверен, как я могу установить значение в этой функции и получить его в HTML. Есть ли более простой способ?
models.py
class Data_Repo1(models.Model):
user = models.ForeignKey(User, default=True, related_name="Data_Repo1", on_delete=models.PROTECT)
date1 = models.DateField(blank=True, null=True)
date2 = models.DateField(blank=True, null=True)
class Meta:
ordering = ['-pk']
def __str__(self):
return self.date1 or 'None'
def get_absolute_url(self):
return reverse('repo1')
def save(self, *args, **kwargs):
if self.date1 is None:
#Something Here - "self.date1 = NONE"
else:
return
if self.date2 is None:
#Something Here - "self.date2 = NONE"
else:
return
super().save(*args, **kwargs) # Call the "real" save() method.
views.py
def repo1(request): context = {}
context['Add_Repo'] = Add_Repo.objects.filter(user=request.user)
context['Data_Repo1'] = Data_Repo1.objects.filter(user=request.user)
context['Field_Repo1'] = Field_Repo1.objects.filter(user=request.user)
if self.date1 is None: #NOT WORKING
print('TEST') #NOT WORKING
return render(request, 'sheets/list_repo/repo1.html', context)
HTML
{% for post in Data_Repo1 %}
{% if date1 == 'NONE' %}
<h1>ITS HERE</h1>
{% endif %}
<tr>
<td><div><a href="{% url 'update_extinguisher' pk=post.pk %}" style="color: black;">{% if post.date1 %}{{ post.date1 }}{%else%}<span style="color: transparent;">None</span>{%endif%}</a></div></td>
<td><div><a href="{% url 'update_extinguisher' pk=post.pk %}" style="color: black;">{% if post.date2 %}{{ post.date2 }}{%else%}<span style="color: transparent;">None</span>{%endif%}</a></div></td>
</tr>
{% endfor %}
Спасибо!
Вы должны добавить валидацию в view.py
, а не в модели. Например,
def repo1(request):
context = {}
if request.POST:
# Get your submitted values and store it in model
if request.POST.get('post1'):
.....
if request.POST.get('post2'):
.....
return render(request, 'sheets/list_repo/repo1.html', context)
else:
context['Add_Repo'] = Add_Repo.objects.filter(user=request.user)
context['Data_Repo1'] = Data_Repo1.objects.filter(user=request.user)
context['Field_Repo1'] = Field_Repo1.objects.filter(user=request.user)
if self.date1 is None: #NOT WORKING
print('TEST') #NOT WORKING
return render(request, 'sheets/list_repo/repo1.html', context)
Пожалуйста, внесите следующие незначительные изменения в ваш код для проверки пустых дат и итерации по списку репозиториев:
context['Add_Repo'] = Add_Repo.objects.filter(user=request.user)
context['Data_Repo1'] = Data_Repo1.objects.filter(user=request.user)
context['Field_Repo1'] = Field_Repo1.objects.filter(user=request.user)
for repo in context['Data_Repo1']:
if repo.date1 == "" and repo.date2 == "":
print("Repo: {} has empty date1 and date2".format(repo.pk))
continue
if repo.date1 == "":
print("Repo: {} has empty date1".format(repo.pk))
continue
if repo.date2 == "":
print("Repo: {} has empty date2".format(repo.pk))
return render(request, 'sheets/list_repo/repo1.html', context)