I have a Django web application in which I would like to integrate a local payment API in order to enable customers who want to use their money from this payment application to pay their car insurance but honestly, I don't have any idea of how to do it.
Below are the related models (Contrat and Reglement):
class Contrat(models.Model):
Statut_contrat = (
('Encours', 'Encours'),
('Suspendu', 'Suspendu'),
('Expiré', 'Expiré'),
)
categorie_choices =(
('Tourisme', 'Tourisme'),
('Transport', 'Transport')
)
# numero_de_contrat = shortuuid.uuid()
type_contrat = models.ForeignKey(TypeContrat, on_delete=models.CASCADE, null=True, blank=False)
tca = models.DecimalField(_('TCA 4%'),max_digits=10, decimal_places=2, default=0.00)
numero_de_contrat = models.CharField(max_length=50, blank=True, null=True,db_index=True, unique=True)
statut_assurance =models.CharField(max_length=15, choices=Statut_contrat, default='Non')
vehicule = models.ForeignKey(Vehicule, on_delete=models.CASCADE)
utilisateur = models.ForeignKey(User, on_delete=models.CASCADE)
nombre_de_mois = models.IntegerField(null=True, blank=True)
sous_couvert = models.CharField(_('S/C'),max_length=200, null=True, blank=True)
categorie = models.CharField(max_length=50, choices=categorie_choices, null=False, blank=False, default='Tourisme')
created = models.DateField(auto_now_add=True)
modified = models.DateField(auto_now=True)
active = models.BooleanField(default=True)
remainingdays=models.IntegerField(default=0)
blocked_date=models.DateField()
unblocked_date = models.DateField(null=True, blank=True)
history = HistoricalRecords()
class Meta:
ordering=('-created',)
#property
def static_id(self):
'C{0:07d}'.format(self.pk)
def __str__(self):
return str(self.numero_de_contrat)
def save(self, *args, **kwargs):
self.tca=self.type_contrat.montant_du_contrat*Decimal(0.04)
if self.statut_assurance=="Suspendu":
dt=abs(self.blocked_date-self.modified)
print('Difference est:',dt)
numberOfDaysLeft= self.remainingdays-dt.days
print('Big diff',numberOfDaysLeft)
self.remainingdays=numberOfDaysLeft
self.blocked_date=date.today()
super(Contrat, self).save(*args, **kwargs)
def activeStatus(self):
if self.nombre_de_mois==0:
return self.active==False
else:
return self.active==True
def get_NbDays(self):
if self.statut_assurance=='Encours':
# nb_Days = timedelta(days=self.remainingdays)+date.today()
nb_Days = timedelta(days=self.remainingdays)+self.blocked_date
print('Date de fin', nb_Days)
return nb_Days
elif self.statut_assurance=='Suspendu':
nb_Days = timedelta(days=self.remainingdays) + self.blocked_date
return nb_Days
else:
nb_Days = self.modified
return nb_Days
class Reglement(models.Model):
payment_list = (('Espece', 'Espece'),
('Cheque', 'Cheque'),
('Carte de crédit', 'Carte de crédit'),
('Carte de débit', 'Carte de débit'),
('A crédit', 'A crédit'),)
code_reglement = models.CharField(max_length=50, blank=True, null=True, db_index=True, unique=True)
contrat = models.ForeignKey(Contrat, on_delete=models.CASCADE)
utilisateur = models.ForeignKey(User, on_delete=models.CASCADE)
date_reglement = models.DateField(auto_now_add=True)
montant_a_regler = models.DecimalField(max_digits=10, decimal_places=2)
mode_de_paiment = models.CharField(max_length=15,choices=payment_list)
created = models.DateField(auto_now_add=True)
modified = models.DateField(auto_now=True)
regle = models.BooleanField(default=False)
history = HistoricalRecords()
class Meta:
ordering=('-created',)
#property
def static_id(self):
'R{0:07d}'.format(self.pk)
Please assist me
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 am very new to django, any help highly appreciated. thanks in advance!
Here is my code 'model.py'
class Stocks(models.Model):
ticker = models.CharField(max_length=30, primary_key=True, unique=True)
company_name = models.CharField(max_length=100, blank=True, null=True)
sector = models.CharField(max_length=50, blank=True, null=True)
class Meta:
db_table = 'stocks'
def __str__(self):
return "%s %s %s" % (self.ticker, self.company_name, self.sector)
class QuarterlyFinance(models.Model):
ticker = models.ForeignKey(Stocks, db_column='ticker',on_delete=models.CASCADE,
related_name='quarter_result', blank=True, null=True)
quarter_end = models.DateTimeField(blank=True, null=True)
total_revenue = models.FloatField(blank=True, null=True)
net_income = models.FloatField(blank=True, null=True)
class Meta:
db_table = 'quarterly_finance'
unique_together = (('ticker', 'quarter_end'),)
def __str__(self):
return "%s %s %s %s" % (self.ticker, self.quarter_end, self.total_revenue,
self.net_income)
serialize.py
class StocksSerialize(serializers.ModelSerializer):
class Meta:
model=Stocks
fields="__all__"
depth=1
class QuarterlyFinanceSerialize(serializers.ModelSerializer):
class Meta:
model=QuarterlyFinance
fields=['quarter_end', 'total_revenue','net_income']
depth=1
view.py
class DataClassView(APIView):
def get(self, request, format=None):
max_day = Advice.objects.latest('advice_date').advice_date
max_day=max_day.strftime("%Y-%m-%d")
qfinance = QuarterlyFinance.objects.filter(ticker='TCS')
stk = Stocks.objects.filter(ticker='TCS')
qfin_ser_obj = QuarterlyFinanceSerialize(qfinance, many=True)
stock_ser_obj = StocksSerialize(stk, many=True)
result = stock_ser_obj.data +qfin_ser_obj.data
return Response(result)
I want to return JSON output like this:
{
"ticker": "TCS",
"company_name": "Tata Consultancy Services Ltd",
"sector": "IT",
"qtr_result": [
{
"quarter_end": "2021-06-30T04:00:00",
"total_revenue": 454110000000,
"net_income": 90080000000
},
{
"quarter_end": "2021-03-31T04:00:00",
"total_revenue": 437050000000,
"net_income": 92460000000
},
{
"quarter_end": "2020-12-31T05:00:00",
"total_revenue": 420150000000,
"net_income": 87010000000
},
{
"quarter_end": "2020-09-30T04:00:00",
"total_revenue": 401350000000,
"net_income": 74750000000
}
]
}
my code is working but I am getting data from both table in separate array within JSON. I want QuarterlyFinance data should be inside Stock table data as an array.
class StocksSerialize(serializers.ModelSerializer):
quarter_result = QuarterlyFinanceSerialize(read_only=True, many=True)
class Meta:
model=Stocks
fields="__all__"
depth=1
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 try to chain four categories with django smart select but it does not work properly. Django does not take or input values from in the last one. clothing_size. It is working properly till clothing sizes. That selectbox is always empty. My model:
What could be the problem here? That does not seem like js problem, because other fields are working properly.
from django.db import models
from smart_selects.db_fields import ChainedForeignKey
# Create your models here.
class MainCategory(models.Model):
name = models.CharField(max_length=20, null=True)
def __str__(self):
return self.name
class ClothingType(models.Model):
main_category = models.ForeignKey(MainCategory, on_delete=models.CASCADE, null=True)
clothing_type = models.CharField(max_length=64, null=True)
def __str__(self):
template = '{0.main_category} {0.clothing_type}'
return template.format(self)
class ClothingSubType(models.Model):
main_category = models.ForeignKey(MainCategory, on_delete=models.CASCADE, null=True)
# clothing_type = models.ForeignKey(ClothingType, on_delete=models.CASCADE, null=True)
clothing_type = ChainedForeignKey(ClothingType, chained_field="main_category", chained_model_field="main_category", show_all=False, auto_choose=True, sort=True, null=True)
clothing_sub_type = models.CharField(max_length=254, null=True)
def __str__(self):
template = '{0.main_category} {0.clothing_type} {0.clothing_sub_type}'
return template.format(self)
class ClothingSize(models.Model):
main_category = models.ForeignKey(MainCategory, on_delete=models.CASCADE, null=True)
clothing_type = ChainedForeignKey(ClothingType, chained_field="main_category", chained_model_field="main_category", show_all=False, auto_choose=True, sort=True, null=True)
clothing_sub_type = ChainedForeignKey(ClothingSubType, chained_field="clothing_type", chained_model_field="clothing_type", show_all=False, auto_choose=True, sort=True, null=True)
# clothing_sub_type = models.ForeignKey(ClothingSubType, on_delete=models.CASCADE, null=True)
clothing_size = models.CharField(max_length=30, null=True)
def __str__(self):
template = '{0.main_category} {0.clothing_type} {0.clothing_sub_type} {0.clothing_size}'
return template.format(self)
class Product(models.Model):
name = models.CharField(max_length=30, null=True)
sku = models.CharField(max_length=20, null=True)
main_category = models.ForeignKey(MainCategory, on_delete=models.CASCADE, null=True)
clothing_type = ChainedForeignKey(
ClothingType,
chained_field="main_category",
chained_model_field="main_category",
show_all=False,
auto_choose=True,
sort=True,
null=True
)
product_category = ChainedForeignKey(
ClothingSubType,
chained_field="clothing_type",
chained_model_field="clothing_type",
show_all=False,
auto_choose=True,
sort=True,
null=True
)
clothing_size = ChainedForeignKey(
ClothingSize,
chained_field="clothing_sub_type",
chained_model_field="clothing_sub_type",
show_all=False,
auto_choose=True,
sort=True,
null=True
)
def __str__(self):
template = '{0.name}'
return template.format(self)