models.py
class UserProfile(models.Model):
user = models.OneToOneField(User)
security_question = models.CharField('Question', max_length=255, null=True, blank=True)
security_answer = models.CharField('Answer', max_length=255, null=True, blank=True)
phone_daytime = models.CharField('Phone daytime', max_length=50, null=True, blank=True)
phone_mobile = models.CharField('Phone mobile', max_length=50, null=True, blank=True)
work_street = models.CharField('Street', max_length=255, null=True, blank=True)
work_suburb = models.CharField('Suburb', max_length=200, null=True, blank=True)
work_state = models.CharField('State', max_length=100, null=True, blank=True)
work_postcode = models.CharField('Postcode', max_length=20, null=True, blank=True)
work_country = models.CharField('Country', max_length=200, null=True, blank=True)
views.py
def method(request):
''''
profile = UserProfile.objects.get(user=user)
'''''
return render(request,'index.html',{'profile':profile})
How to convert the database field's work_street,work_suburb,work_state,work_postcode, work_country into string and render it in template.
you can create index.html like this to render it as html
index.html
<body>
<p>{{ profile.user.username }}</p>
<p>{{ profile.security_question }}</p>
<p>{{ profile.work_street}}</p>
<p>{{ profile.work_suburb}}</p>
<p>{{ profile.work_state}}</p>
<p>{{ profile.work_postcode}}</p>
<p>{{ profile.work_country }}</p>
..... etc
<script>
var address = "{{ profile.work_street }}{{profile.work_suburb}}{{profile.work_postcode}}";
alert(address);
</script>
</body>
Related
I'm trying to show an image in Django, the problem is it won't show up when I add the HTML template, I have tried all combinations (ex: {{ cars.image_main.url }}, {{ car.image_main.url }}).
If I delete all the HTML form Template and write {{ cars.image_main.url }} the image will show up. but When I put the HTML template back and insert the {{ cars.image_main.url }} into the code, the image does show up.
models.py:
class Car(models.Model):
dealer = models.ForeignKey(Dealer, on_delete=models.DO_NOTHING)
brand = models.CharField(max_length=100)
CATEGORY = (
('New', 'New'),
('Used', 'Used')
)
category = models.CharField(max_length=50, choices=CATEGORY)
image_main = models.ImageField(upload_to='images')
image1 = models.ImageField(upload_to='images', blank=True)
image2 = models.ImageField(upload_to='images', blank=True)
image3 = models.ImageField(upload_to='images', blank=True)
engine = models.CharField(max_length=100, blank=True)
stock_number = models.IntegerField(blank=True, null=True)
mpg = models.CharField(max_length=100, blank=True)
exterior_color = models.CharField(max_length=100, blank=True)
interior_color = models.CharField(max_length=100, blank=True)
drivetrain = models.CharField(max_length=100, blank=True)
mileage = models.IntegerField(blank=True, null=True)
sold = models.BooleanField(default=False, blank=False)
transmission = models.CharField(max_length=50, blank=True)
YEAR_CHOICES = [(r, r) for r in range(2005, datetime.date.today().year+1)]
year = models.IntegerField(
('year'), choices=YEAR_CHOICES, default=datetime.datetime.now().year)
power = models.IntegerField()
fuel = models.CharField(max_length=50, blank=True)
price = models.IntegerField()
description = models.TextField()
date = models.DateField()
def __str__(self):
return self.brand
def get_absolute_url(self):
return reverse('car_detail', kwargs={
'car_id': self.id
})
views.py:
def car_detail(request, car_id):
cars = get_object_or_404(Car, id=car_id)
context = {
'cars': cars
}
return render(request, 'car_detail.html', context)
car_detail.html:
<li data-thumb="images/thumbnail1.jpg"> <img src="images/thumbnail1.jpg" alt="" /> </li>
Try this:
car_detail.html:
<li data-thumb="images/thumbnail1.jpg"> <img src="{{ cars.image_main.url }}" alt="" /> </li>
I want to render data to my webpage from my django app however only two of the required slots are being rendered
my models are:
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, null=True, blank=True)
date_ordered = models.DateTimeField(auto_now_add=True)
complete = models.BooleanField(default=False)
transaction_id = models.CharField(max_length=100, null=True)
class OrderItem(models.Model):
product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True)
order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True)
quantity = models.IntegerField(default=0, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
name = models.CharField(max_length=200, null=True)
email = models.CharField(max_length=200, null=True)
class Product(models.Model):
name = models.CharField(max_length=200)
price = models.DecimalField(max_digits=7, decimal_places=2)
digital = models.BooleanField(default=False,null=True, blank=True)
image = models.ImageField(null=True , blank=True)
description = models.TextField(max_length=5000, null=True)
points = models.DecimalField(max_digits=5,decimal_places=0, null=True)
and my views are
def admin_dashboard (request):
order_list = Order.objects.all()
context = {'order':order_list}
template = "admin_dashboard.html"
return render(request, 'store/admin_dashboard.html', context)
my HTML is:
{% extends 'store/admin_main.html' %}
{% load static %}
{% block content %}
{% for order in order %}
<h6>{{ order.transaction_id }}</h6>
<p>{{ order.customer }}</p>
<p>{{ order.shippingaddress }}</p>
<p>{{ order.orderitem }}</p>
{% endfor%}
{% endblock content %}
1598061443.212917
userNew
which is just the transaction id and user.
how can I have all the rest of fields filled
class Product(models.Model):
subcategory = models.ManyToManyField(Subcategory, related_name="Category")
name = models.CharField(max_length=32, unique=True)
title = models.CharField(max_length=3000)
ean = models.PositiveIntegerField(blank=True, null=True, unique=True)
brand = models.ForeignKey(Brand, on_delete=models.CASCADE, blank=True, null=True)
origin_name = models.CharField(max_length=32, blank=True, null=True)
quantity = models.PositiveIntegerField(blank=True, null=True)
highlights = models.TextField(max_length=3000, blank=True, null=True)
description = models.TextField(max_length=3000, blank=True, null=True)
delivery = models.TextField(max_length=3000, blank=True, null=True)
selling_price = models.DecimalField(max_digits=9, decimal_places=2)
slug = models.SlugField(unique=True)
class Infobox(models.Model):
name = models.CharField(max_length=32)
measurment = models.CharField(max_length=32)
resolution = models.CharField(max_length=32)
product = models.ForeignKey(Product, on_delete=models.CASCADE, blank=True, null=True)
I would like to display on my detail page all infobox objects that are linked to the device, do any of you know how to do this?
THANKSSSS <3
urls.py
Add below to your urlpatterns:
path('view_infoboxes/<int:product_id>', views.view_infoboxes, name='view_infoboxes'),
views.py
def view_infoboxes(request, product_id):
template = loader.get_template('page.html')
context = {"infoboxes": Infobox.objects.filter(product=product_id)}
return HttpResponse(template.render(context, request))
page.html
...
<div class="row">
{% for infobox in infoboxes %}
<p>{{ infobox.name }}</p>
{% endfor %}
</div>
...
So what I say might seem complicated, but I think the answer is easy. I just can't figure it out. I have a form for a Lecture model, which a logged in teacher can use to post a lecture for his specific courses only. Thing is that in my database I have a TeacherData model which contains a teacher_ID field used for verification, so a teacher cannot create his account on the other Teacher model, if teacher_ID entered doesn't match. But when a course is created in database, the teacher used is the one from TeacherData. So to create my query I have to filter the courses based on TeacherData and then using teacher_ID, to link to Teacher model. I just don't know how to build this queryset but I replicated the wanted behaviour in the template:
{% if user.is_authenticated and user.is_teacher %}
<ul>
{% for data in teacher_data %}
{% if data.teacher_ID == user.teacher.teacher_ID %}
{% for course in courses %}
{% if course.teacher1 == data or course.teacher2 == data %}
<li>
{{ course.name }}
</li>
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
</ul>
{% endif %}
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
name = models.CharField(max_length=30, null=True, blank=True, default=None)
surname = models.CharField(max_length=50, null=True, blank=True, default=None)
email = models.EmailField(unique=True, null=True, blank=True, default=None)
teacher_ID = models.CharField(unique=True, max_length=14,
validators=[RegexValidator(regex='^.{14}$',
message='The ID needs to be 14 characters long.')],
null=True, blank=True, default=None)
class TeacherData(models.Model):
name = models.CharField(max_length=30)
surname = models.CharField(max_length=50)
teacher_ID = models.CharField(unique=True, max_length=14)
notes = models.CharField(max_length=255, default=None, blank=True)
class Lecture(models.Model):
LECTURE_CHOICES = (
('Courses', 'Courses'),
('Seminars', 'Seminars'),
)
course = models.ForeignKey('Course', on_delete=models.CASCADE, default='', related_name='lectures', )
lecture_category = models.CharField(max_length=10, choices=LECTURE_CHOICES, default='Courses', )
lecture_title = models.CharField(max_length=100, blank=True, null=True)
content = models.TextField(blank=False, default=None)
class Course(models.Model):
study_programme = models.ForeignKey('StudyProgramme', on_delete=models.CASCADE, default='')
name = models.CharField(max_length=50, unique=True)
ects = models.PositiveSmallIntegerField(validators=[MaxValueValidator(99)])
description = models.TextField()
year = models.PositiveSmallIntegerField(validators=[MaxValueValidator(99)])
semester = models.IntegerField(choices=((1, "1"),
(2, "2"),
), default=None)
teacher1 = models.ForeignKey('TeacherData', on_delete=models.CASCADE, default=None,
verbose_name="Course Teacher", related_name='%(class)s_course_teacher')
teacher2 = models.ForeignKey('TeacherData', on_delete=models.CASCADE, default=None, null=True,
verbose_name="Seminar Teacher", related_name='%(class)s_seminar_teacher')
class LectureForm(forms.ModelForm):
lecture_title = forms.CharField(max_length=100, required=True)
course = forms.ModelChoiceField(initial=Course.objects.first(), queryset=Course.objects.filter(
Q(teacher1__id__in=[t.id for t in TeacherData.objects.filter(
teacher_ID__iexact=[t.teacher_ID for t in Teacher.objects.all()])])))
class Meta:
model = Lecture
fields = ('course', 'lecture_category', 'lecture_title', 'content')
try this,
from django.contrib.auth.decorators import permission_required
from .models import Teacher
#permission_required( # permission class to check 'is_authenticated' and 'is_teacher')
def my_view(request):
queryset = Teacher.objects.filter(teacher_ID=request.user.teacher_ID)
if queryset:
# do something with teacher data ('queryset' holds those data)
else:
return HttpResponse("teacher id not found")
I am not that good at queries, so I need some help. I have a Course model, and a TeacherData model. Each teacher has its own courses. But when a teacher makes an account I use a Teacher model. And if teacher_ID column from TeacherData doesn't match the one entered by the user, the account cannot be created.
Now, in my form I need to show Courses for each teacher, so that a Lecture instance can be created. I was thinking to use teacher_ID as bridge connecting Teacher model with TeacherData model and then I would be able to show the courses that only a specific teacher has.
This is what I tried, but can't figure out:
class Teacher(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
name = models.CharField(max_length=30, null=True, blank=True, default=None)
surname = models.CharField(max_length=50, null=True, blank=True, default=None)
email = models.EmailField(unique=True, null=True, blank=True, default=None)
teacher_ID = models.CharField(unique=True, max_length=14,
validators=[RegexValidator(regex='^.{14}$',
message='The ID needs to be 14 characters long.')],
null=True, blank=True, default=None)
class Lecture(models.Model):
LECTURE_CHOICES = (
('Courses', 'Courses'),
('Seminars', 'Seminars'),
)
course = models.ForeignKey('Course', on_delete=models.CASCADE, default='', related_name='lectures',)
lecture_category = models.CharField(max_length=10, choices=LECTURE_CHOICES, default='Courses',)
lecture_title = models.CharField(max_length=100, blank=True, null=True)
content = models.TextField(blank=False, default=None)
class Course(models.Model):
study_programme = models.ForeignKey('StudyProgramme', on_delete=models.CASCADE, default='')
name = models.CharField(max_length=50, unique=True)
ects = models.PositiveSmallIntegerField(validators=[MaxValueValidator(99)])
description = models.TextField()
year = models.PositiveSmallIntegerField(validators=[MaxValueValidator(99)])
semester = models.IntegerField(choices=((1, "1"),
(2, "2"),
), default=None)
teacher1 = models.ForeignKey('TeacherData', on_delete=models.CASCADE, default=None,
verbose_name="Course Teacher", related_name='%(class)s_course_teacher')
teacher2 = models.ForeignKey('TeacherData', on_delete=models.CASCADE, default=None, null=True,
verbose_name="Seminar Teacher", related_name='%(class)s_seminar_teacher')
class TeacherData(models.Model):
name = models.CharField(max_length=30)
surname = models.CharField(max_length=50)
teacher_ID = models.CharField(unique=True, max_length=14)
notes = models.CharField(max_length=255, default=None, blank=True)
Run code snippetExpand snippet
class LectureForm(forms.ModelForm):
lecture_title = forms.CharField(max_length=100, required=True)
course = forms.ModelChoiceField(initial=Course.objects.first(), queryset=Course.objects.filter(
Q(teacher1__surname__in=[t.surname for t in TeacherData.objects.filter(
Q(teacher_ID__iexact=[x.teacher_ID for x in Teacher.objects.all()]))])))
class Meta:
model = Lecture
fields = ('course', 'lecture_category', 'lecture_title', 'content')
The expected behavior is when teacher is logged in, they would able to add a new lecture only for courses that they teach. I can achieve roughly the same effect by doing the following in a template
{% for data in teacher_data %}
{% if data.teacher_ID == user.teacher.teacher_ID %}
{% for course in courses %}
{% if course.teacher1 == data or course.teacher2 == data %}
<li>
{{ course.name }}
</li>
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}