Django. Вывод даты окончания абонемента
Нужно вывести информацию о плане и дате окончания абонемента конкретного пользователя. Есть модель Member в ней надо сравнить поле emailID с email пользователя зарегистрированного в базе данных. Данный код не выводит ничего, помогите найти ошибку. Спасибо
models.py
class Member(models.Model):
name = models.CharField(max_length=50)
contact = models.CharField(max_length=10)
emailid = models.CharField(max_length=50)
age = models.CharField(max_length=40)
gender = models.CharField(max_length=10, default="")
plan = models.CharField(max_length=50)
joindate = models.DateField(max_length=40)
expiredate = models.DateField(max_length=40)
initialamount = models.CharField(max_length=10)
def __str__(self):
return self.name
views.py
def View_Profile(request):
if Member.emailid == request.user.email:
prof = Member.objects.all()
d = {'profile': prof}
return render(request, 'profile.html', d)
template.html
<table id="example" class="table table-hover display">
<thead>
<tr>
<th>Имя</th>
<th>Телефон</th>
<th>Email</th>
<th>Возраст</th>
<th>Название плана</th>
<th>Дата окончания абонимента</th>
<th>Стоимость плана</th>
</tr>
</thead>
<tbody>
{% for i in prof %}
<tr>
<td>{{i.name}}</td>
<td>{{i.contact}}</td>
<td>{{i.emailid}}</td>
<td>{{i.age}}</td>
<td>{{i.plan}}</td>
<td>{{i.expiredate}}</td>
<td>{{i.initialamount}}</td>
</tr>
{% endfor %}
</tbody>
</table>
Ответы (1 шт):
Member.emailidсам по себе не вернет сущность member, Вам нужно найти его используя известные данные(email):
member = Member.objects.get(emailid=request.user.email)
Тут member как раз будет та сущность что Вы ищете, при условии что Вы ее добавили в БД, в этом тоже стоит убедиться, в примере нет намека на то что Вы заполняете эту модель данными.
- В таких случаях нужно использовать связи между моделями. В вашем случае, полагаю, подойдет
OneToOneField(Один-к-одному). Суть заключается в том, что Вы можете однозначно связать две модели.
class Member(models.Model):
...
# покажу только реализацию связи
user_id = models.OneToOneField(User, on_delete=models.CASCADE)
...
def __str__(self):
return self.name
У OneToOneField есть и другие параметры, советую ознакомиться в документации. В данном примере первым аргументом передается связываемая первичная модель - User/ Вторым - поведение при удаление models.CASCADE - означает, что если запись в User удалиться, то и связываемая запись в Member так же будет удалена. Есть разные поведение, так же описанные в доках.
- Если совсем брать Ваш пример, то на мой взгляд, лучше было бы не делать дополнительную модель, а расширить стандартную модель
Userунаследовавшись от нее.