我正在尝试使用django admin&;壳我正在尝试制作订阅模型。计划模型通过计划服务模型具有多个服务。但是有点不对劲
控制台错误:
>>> p1 = Plan(code='PR', description='Premium', price=60000, tax=0)
>>> p1.save()
Traceback (most recent call last):
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
psycopg2.errors.UndefinedTable: relation "subscriptions_plan" does not exist
LINE 1: UPDATE "subscriptions_plan" SET "status" = '(''Activo'', ''A...
^
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/models/base.py", line 745, in save
self.save_base(using=using, force_insert=force_insert,
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/models/base.py", line 782, in save_base
updated = self._save_table(
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/models/base.py", line 864, in _save_table
updated = self._do_update(base_qs, using, pk_val, values, update_fields,
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/models/base.py", line 917, in _do_update
return filtered._update(values) > 0
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/models/query.py", line 771, in _update
return query.get_compiler(self.db).execute_sql(CURSOR)
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1500, in execute_sql
cursor = super().execute_sql(result_type)
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/models/sql/compiler.py", line 1152, in execute_sql
cursor.execute(sql, params)
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 100, in execute
return super().execute(sql, params)
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/home/xmedinavei/Desktop/version_project/venv/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "subscriptions_plan" does not exist
LINE 1: UPDATE "subscriptions_plan" SET "status" = '(''Activo'', ''A...
utils.py
# Django
from django.db import models
class BaseVersionPlusModel(models.Model):
'''This handle the base model for all project app models of the project.'''
AC = "Activo"
IN = "Inactivo"
STATUS_CHOICES = (
(AC, "Activo"),
(IN, "Inactivo"),
)
status = models.CharField(max_length=14,
choices=STATUS_CHOICES,
default=STATUS_CHOICES[0])
created_at = models.DateField(auto_now_add=True)
modified_at = models.DateField(auto_now=True)
class Meta:
abstract = True
服务/型号.py
# Models
from versionplus.utils import BaseVersionPlusModel
class Service(BaseVersionPlusModel):
'''We can handle all the services available for suscriptions.'''
code = models.CharField(max_length=17,
primary_key=True)
name = models.CharField(max_length=100)
cost = models.FloatField()
price = models.FloatField()
store = models.CharField(max_length=255)
订阅/models.py
'''Suscription app models.'''
# Django
from django.db import models
from django.core.exceptions import ValidationError
# Models
from versionplus.utils import BaseVersionPlusModel
from services.models import Service
from partners.models import Partner
from services.models import Service
from products.models import Product
class Plan(BaseVersionPlusModel):
'''
Model that handle the plans available for the clients.
Period of suscription can be choosed.
A Plan can be set active or inactive.
Services can be added as many as wanted.
'''
M = "Mensual"
B = "Bimensual"
T = "Trimestral"
PERIOD_CHOICES = (
(M, "Mensual"),
(B, "Bimensual"),
(T, "Trimestral"),
)
code = models.CharField(max_length=17,
primary_key=True)
description = models.CharField(max_length=255)
period = models.CharField(max_length=14,
choices=PERIOD_CHOICES,
null=True,
default=PERIOD_CHOICES[0])
services = models.ManyToManyField(Service,
through='PlanService',
blank=True)
price = models.FloatField()
tax = models.FloatField()
def get_services(self):
return "\n".join([p.name for p in self.services.all()])
class PlanService(BaseVersionPlusModel):
'''
This is the service model linked to the Plan.
The service limit usage can be added here.
Handle the service used counter and service remaining counter.
A Plan can have multiple services throught this model.
'''
service = models.ForeignKey(Service,
on_delete=models.CASCADE)
plan = models.ForeignKey(Plan,
related_name='plan_services',
on_delete=models.CASCADE)
consume = models.ForeignKey('Consume',
on_delete=models.CASCADE,
blank=True)
limit = models.FloatField(default=9999)
def consume_counter(self):
'''Check consume_counter.'''
return self.consume.all().count()
class Consume(BaseVersionPlusModel):
'''This is the consumption log of the PlanService model.'''
pass
def __str__(self):
return f'Consumed: {created_at}'
class Subscription(BaseVersionPlusModel):
'''
Suscription is the model associated to the suscription available and the partner client.
'''
partner = models.ForeignKey(Partner,
related_name='subscription_partner',
on_delete=models.PROTECT,
blank=True)
plan = models.ForeignKey('Plan',
related_name='subscription_partner',
on_delete=models.PROTECT,
blank=True, null=True)
payment_date = models.DateField()
renovate = models.DateField()
目前没有回答
相关问题 更多 >
编程相关推荐