Good day, I want to strftime the created model instance and display it in the HTML template(as a transaction_id). But I don't seem to get it right. Thanks for your help.
models.py
class Order(models.Model):
user = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField()
address = models.CharField(max_length=250)
phone_number = models.CharField(max_length=20)
city = models.CharField(max_length=100)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
paid = models.BooleanField(default=False)
braintree_id = models.CharField(max_length=150, blank=True)
coupon = models.ForeignKey(Coupon, related_name='orders', null=True, blank=True, on_delete=models.SET_NULL)
discount = models.IntegerField(default=0, validators=[
MinValueValidator(0),
MaxValueValidator(100)
])
views.py
def order_list(request):#datetime.now().strftime("%Y%m%d%H%M%S")
transaction_id = Order.objects.get(created)
orders = Order.objects.all()
current_user = request.user
success = Order.objects.filter(user=current_user.id).filter(paid=True)
fail = Order.objects.filter(user=current_user.id).filter(paid=False)
return render(request, 'orders/order/order_list.html', {
'success': success,
'fail': fail,
'current_user': current_user,
'orders':orders,
'transaction_id':transaction_id,
})
html
<p class="card-text">
<mark style="color: whitesmoke; background-color: brown;border-radius: 3px;font-weight: bold;">{{transaction_id}}</mark>
</p>
you getting error of "transaction_id = Order.objects.get(created)" line
what is "created" in get() method
Well, this is what I did to fix this
I added the strftime func in my models.py
models.py
def htmldisplaytime(self):
time = self.created.strftime("%Y%m%d%H%M%S")
return time
Related
`is_super is a user whose account expires after 30 days and is_super field should be false. I tried many methods, but they never false this field after the end of the time. I can't think of a way or I don't know where we made a mistake.
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin,AbstractUser
from .managers import UserManager
from datetime import datetime,timedelta
from django.utils import timezone
# Create your models here.
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=100, unique=True)
phone = models.CharField(max_length=11, unique=True)
full_name = models.CharField(max_length=200)
is_active = models.BooleanField(default= True)
is_admin = models.BooleanField(default=False)
is_super = models.BooleanField(default=False)
create_time_super_user = models.DateTimeField(auto_now=True, null=True, blank=True)
created = models.DateTimeField(auto_now_add=True, null=True, blank=True)
objects = UserManager()
USERNAME_FIELD = 'phone'
REQUIRED_FIELDS = ['email', 'full_name']
def __str__(self):
return self.phone
#property
def is_staff(self):
return self.is_admin
# #property
def active(self):
now = timezone.now()
if self.create_time_super_user > now - timedelta(seconds=15):
self.is_super = False
self.save()
return self
def User_expire_time(self):
user_super = self.object.all()
if self.is_super:
if self.objects.filter(create_time_super_user__lte=self.timezone.now() - timedelta(day=30)):
user_super.update(is_super = False)
user_super.save
return user_super
I am new to Django and have a MultiSelectField in my Meal Model. I am also utilizing a MultipleChoiceField with widget CheckBoxSelectMultiple in my Meal Form. When I select a checkbox in the Template and POST the form, I get an error which states, "[ValidationError(["Value ['CHICKEN CASSEROLE'] is not a valid choice."])]}). I am wondering what I am doing wrong here and need some assistance in figuring this out. Any help is appreciated. Below is my code for my Model and Form:
class Meal(models.Model):
day = models.CharField(max_length=255, blank=True)
category = models.CharField(max_length=100, blank=True)
meal_time = models.TimeField(null=True, blank=True, verbose_name='Meal Time')
recipes = MultiSelectField(max_length=5000, choices=[], null=True)
meal_id = models.IntegerField(null=True, blank=True)
menu = models.ForeignKey(Menu, on_delete=models.CASCADE, null=True, blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
def __str__(self):
return "%s %s %s %s" % (
self.day, self.category, self.meal_time, self.recipes)
class Meta:
app_label = "mealmenumaster"
managed = True
class MealForm(forms.ModelForm):
day = DynamicChoiceField(choices=[], required=False)
category = forms.ChoiceField(choices=(('', 'None'),) + CATEGORY, required=False)
recipes = forms.MultipleChoiceField(label="Select Recipe(s)",
widget=forms.CheckboxSelectMultiple(), required=False)
meal_id = forms.CharField(widget=forms.HiddenInput(), required=False)
class Meta:
widgets = {'meal_time': TimeInput()}
model = Meal
fields = ['day', 'category', 'meal_time', 'recipes', 'meal_id']
app_label = "mealmenumaster"
def __init__(self, *args, **kwargs):
user_id = kwargs.pop('user_id', None)
super(MealForm, self).__init__(*args, **kwargs)
self.fields['recipes'].choices = [(x.name, x.name) for x in Recipe.objects.filter(user_id=user_id).order_by(Lower('name'))]
self.fields['meal_id'].initial = "0"
self.helper_meal = FormHelper()
self.helper_meal.form_tag = False
self.helper_meal.layout = Layout(
Row(
Div(
Field('day', css_class='form-control'),
css_class='form-group col-md-3 mb0'),
Div(
Field('category', css_class='form-control'),
css_class='form-group col-md-4 mb0'),
Div(
Field('meal_time', css_class='form-control'),
css_class='form-group col-md-4 mb0'),
css_class='form-group col-md-12 mb0'
),
Row(
Div(
Field('recipes', css_class="scrollbar-y"),
Field('meal_id', id='meal_id'),
css_class='form-group col-md-8 mb0'),
css_class='form-group row-md-10 mb0'),
)
And part of my View:
current_user = request.user
user_id = current_user.id
meal_form = MealForm(request.POST, user_id=request.user.id)
if meal_form.is_valid():
menu_id = request.POST.get('menu_id')
if menu_id == "":
messages.error(request, "Create and Save Menu Before Adding Meal(s)")
return redirect('menu')
else:
meal_id = meal_form.cleaned_data['meal_id']
category = meal_form.cleaned_data['category']
meal_time = meal_form.cleaned_data['meal_time']
recipes = meal_form.cleaned_data['recipes']
# get recipes for recipe id
if len(recipes) == 1:
recipes_list = recipes[0]
else:
recipes_list = ', '.join(recipes)
try:
existing_meal = Meal.objects.get(id=int(meal_id))
meal_form = MealForm(request.POST, instance=existing_meal)
# update meal object
saved_meal = meal_form.save(commit=False)
saved_meal.category = category
saved_meal.meal_time = meal_time
saved_meal.recipes = recipes_list
saved_meal.save()
messages.success(request, "Meal Updated")
return HttpResponseRedirect(reverse('menu', args=(),
kwargs={'menu_id': menu_id}))
except Meal.DoesNotExist:
# create new meal object
new_meal = meal_form.save(commit=False)
# set user foreign key
new_meal.user_id = user_id
new_meal.menu_id = int(menu_id)
# save meal
new_meal.save()
new_meal.meal_id = new_meal.id
new_meal.recipes = recipes_list
new_meal.save()
messages.success(request, "Meal Added")
return HttpResponseRedirect(reverse('menu', args=(),
kwargs={'menu_id': menu_id}))
else:
error = meal_form.errors.as_data()
message = "Form Error:", error
messages.error(request, message)
return render_forms(request)
I was able to resolve this issue by adding the actual choices to the model field. As shown below:
RECIPES = [(x.pk, x.name) for x in Recipe.objects.filter().order_by(Lower('name'))] added as choices in the models for the multi-select field "recipes"
I use Django + MongoDB /Djongo for backend on Windows10/VSCode. How is it to instantiate document’s “ObjectId” like it is for other fields using Python? I have been struggling for a several days. Please help. Code example, below:
from djongo import models
class Blog(models.Model):
id= models.AutoField(
auto_created = True,
unique=True,
primary_key = True,
serialize = False,
verbose_name ='ID_nama: ')
name = models.CharField(max_length=100)
tagline = models.TextField()
def __str__(self):
return self.name, self.id
# return self.tagline
class Author(models.Model):
name = models.CharField(max_length=200)
email = models.EmailField()
def __str__(self):
return self.name
class Entry(models.Model):
blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
headline = models.CharField(max_length=255)
body_text = models.TextField()
pub_date = models.DateField()
mod_date = models.DateField(default=date.today)
authors = models.ManyToManyField(Author)
number_of_comments = models.IntegerField(default=0)
number_of_pingbacks = models.IntegerField(default=0)
rating = models.IntegerField(default=5)
def __str__(self):
return self.headline
Here is the document JSON from MongodDB:
{
“_id”: {
“$oid”: “626b6627f0d91c65e9f78cc6”
},
“id”: 5,
“name”: “Beatles Blog”,
“tagline”: “Beatles tour of the Americas.”
}
My target is to be able to capture the “ObjectId” => “_id”: {
“$oid”: “626b6627f0d91c65e9f78cc6”, and save it to another new field for other use/purpose.
I have defined modles.py, view.py, and forms.py but unable to get the drop-down menu. at initial, I have created moodle.py using os_choice and later on a substitute in the operating_system. further, I have created forms and I am using crispy forms to render in front page. likewise, I have defined this in views.py but when I see it on the font page it shows only a text file, not a drop-down with choices.
Here is my model.py code:
from django.db import models
from django.utils.encoding import smart_text
from multiselectfield import MultiSelectField
# Create your models here.
class ResultQuery(models.Model):
os_choice = (
('Windows 10', 'Windows 10'),
('Windows 8', 'Windows 8'),
('Linux', 'Linux'),
)
operating_system = models.CharField(max_length=30, blank=True, null=True, choices=os_choice)
level = models.CharField(max_length=30)
program = models.CharField(max_length=30)
semester = models.CharField(max_length=20)
exam_year = models.IntegerField()
institute = models.CharField(max_length=4)
reg_no = models.CharField(max_length=50)
symbol_num = models.IntegerField()
student_name = models.CharField(max_length=50)
dob = models.DateField()
sgpa = models.TextField()
result = models.CharField(max_length=40)
name = models.CharField(max_length=30)
subject1_code=models.CharField(max_length=40)
subject1_title=models.CharField(max_length=40)
subject1_credit_hour=models.TextField()
subject1_grade_point=models.TextField()
subject1_grade=models.TextField()
subject1_remarks=models.CharField(max_length=20, null=True, blank=True)
subject2_code = models.CharField(max_length=40)
subject2_title = models.CharField(max_length=40)
subject2_credit_hour = models.TextField()
subject2_grade_point = models.TextField()
subject2_grade = models.TextField()
subject2_remarks = models.CharField(max_length=20, null=True, blank=True)
subject3_code = models.CharField(max_length=40)
subject3_title = models.CharField(max_length=40)
subject3_credit_hour = models.TextField()
subject3_grade_point = models.TextField()
subject3_grade = models.TextField()
subject3_remarks = models.CharField(max_length=20, null=True, blank=True)
subject4_code = models.CharField(max_length=40)
subject4_title = models.CharField(max_length=40)
subject4_credit_hour = models.TextField()
subject4_grade_point = models.TextField()
subject4_grade = models.TextField()
subject4_remarks = models.CharField(max_length=20, null=True, blank=True)
subject5_code = models.CharField(max_length=40)
subject5_title = models.CharField(max_length=40)
subject5_credit_hour = models.TextField()
subject5_grade_point = models.TextField()
subject5_grade = models.TextField()
subject5_remarks = models.CharField(max_length=20, null=True, blank=True)
subject6_code = models.CharField(max_length=40)
subject6_title = models.CharField(max_length=40)
subject6_credit_hour = models.TextField()
subject6_grade_point = models.TextField()
subject6_grade = models.TextField()
subject6_remarks = models.CharField(max_length=20, null=True, blank=True)
def __str__(self):
return smart_text(self.name)
Here is my forms.py
from django import forms
from search.models import ResultQuery
from django.forms import MultipleChoiceField, ChoiceField, Form
class ResultForm(forms.Form):
Reg_No=forms.CharField(label="Registration Number")
Name=forms.CharField(label="Your Name")
OS=forms.CharField(label="Operating System")
And here is my views.py
from django.shortcuts import render
# Create your views here.
from django.shortcuts import render
from .forms import ResultForm
from .models import ResultQuery
def home(request):
form=ResultForm(request.POST or None)
template_name = "home.html"
context = {"form": form}
if form.is_valid():
objects = ResultQuery.objects.filter(reg_no=form.cleaned_data['Reg_No'], name=form.cleaned_data['Name'], operating_system=form.cleaned_data['OS'])
context['objects'] = objects
return render(request, template_name, context)
Have you tried doing it like so?
from django import forms
from search.models import ResultQuery
from django.forms import MultipleChoiceField, ChoiceField, Form
class ResultForm(forms.Form):
Reg_No=forms.CharField(label="Registration Number")
Name=forms.CharField(label="Your Name")
OS=forms.ChoiceField(choices=ResultQuery.os_choice)
I run into this error whenever I tried to add a new Tag. I tried to google and read some SO posts, but nothing work for me.
Here are my 2 models :
Summary :
class Summary(models.Model):
question_text = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
url = models.URLField(null=False)
cover_image = models.CharField(max_length=255)
tags = models.ManyToManyField('Tag', related_name='summaries', blank=True)
userProfileSummary = models.ManyToManyField('UserProfile', through='UserProfileSummary')
def __str__(self):
return self.question_text
class Meta:
verbose_name_plural = "Summaries"
Tag :
class Tag(models.Model):
name = models.CharField(max_length=255)
description = models.TextField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
models/init.py:
...
from .tag import Tag
from .summary import Summary
__all__ = (
...
'Tag',
'Summary',
)
Error :
Please, what did I miss ?