first push
This commit is contained in:
548
authentication/models.py
Normal file
548
authentication/models.py
Normal file
@@ -0,0 +1,548 @@
|
||||
import string
|
||||
import random
|
||||
from django.contrib.postgres.fields import ArrayField
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.conf import settings
|
||||
from datetime import datetime, timezone, time, timedelta
|
||||
from django.utils import timezone
|
||||
|
||||
import uuid
|
||||
|
||||
|
||||
# مدل پایه که تمامی مدل ها در سیستم ازین مدل ارث بری می کنند
|
||||
from general_urls import base_user_gate_way_id
|
||||
|
||||
|
||||
class BaseModel(models.Model):
|
||||
key = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
|
||||
create_date = models.DateTimeField(auto_now_add=True)
|
||||
modify_date = models.DateTimeField(auto_now=True)
|
||||
created_by = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
related_name="%(class)s_createdby",
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
blank=True,
|
||||
)
|
||||
modified_by = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="%(class)s_modifiedby",
|
||||
null=True,
|
||||
blank=True,
|
||||
)
|
||||
trash = models.BooleanField(default=False)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
# مدل استان برای ذخیره استان استفاده میشود
|
||||
class Province(BaseModel):
|
||||
name = models.CharField(max_length=200, null=True)
|
||||
province_id_key = models.IntegerField(null=True)
|
||||
province_number = models.IntegerField(default=0)
|
||||
province_name = models.CharField(max_length=100, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(Province, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
# مدل شهرستان برای ذخیره شهرستان استفاده میشود
|
||||
class City(BaseModel):
|
||||
province = models.ForeignKey(
|
||||
Province, on_delete=models.CASCADE, related_name="city_province", null=True
|
||||
)
|
||||
province_id_foreign_key = models.IntegerField(null=True)
|
||||
city_id_key = models.IntegerField(null=True)
|
||||
name = models.CharField(max_length=200, null=True)
|
||||
product_price = models.FloatField(default=0)
|
||||
province_center = models.BooleanField(default=False)
|
||||
city_number = models.IntegerField(default=0)
|
||||
city_name = models.CharField(max_length=100, null=True)
|
||||
province_number = models.IntegerField(default=0)
|
||||
province_name = models.CharField(max_length=100, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(City, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
# مدل زیربخش شهرستان برای ذخیره زیربخش شهرستان استفاده میشود
|
||||
class CityUnit(BaseModel):
|
||||
city = models.ForeignKey(
|
||||
City, on_delete=models.CASCADE, related_name="city_province", null=True
|
||||
)
|
||||
city_id_foreign_key = models.IntegerField(null=True)
|
||||
city_unit_id_key = models.IntegerField(null=True)
|
||||
name = models.CharField(max_length=200, null=True)
|
||||
city_number = models.IntegerField(default=0)
|
||||
city_name = models.CharField(max_length=100, null=True)
|
||||
province_number = models.IntegerField(default=0)
|
||||
province_name = models.CharField(max_length=100, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(CityUnit, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class PermissionLevel(BaseModel):
|
||||
role = models.ForeignKey(
|
||||
Group,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
related_name='group_permission'
|
||||
)
|
||||
name = models.CharField(max_length=100, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(PermissionLevel, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
# مدل آدرس برای ذخیره آدرس استفاده میشود
|
||||
class SystemAddress(BaseModel):
|
||||
province = models.ForeignKey(
|
||||
Province,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="province_address",
|
||||
null=True
|
||||
)
|
||||
city = models.ForeignKey(
|
||||
City,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="city_address",
|
||||
null=True
|
||||
)
|
||||
province_id_foreign_key = models.IntegerField(null=True)
|
||||
city_id_foreign_key = models.IntegerField(null=True)
|
||||
address_id_key = models.IntegerField(null=True)
|
||||
address = models.CharField(max_length=300, null=True)
|
||||
postal_code = models.CharField(max_length=20, default="", null=True)
|
||||
breeding_unique_id = models.CharField(max_length=50, null=True)
|
||||
phone = models.CharField(max_length=20, default="", null=True)
|
||||
phone_type = models.CharField(max_length=20, default="", null=True)
|
||||
no = models.CharField(max_length=5, default="", null=True)
|
||||
floor = models.IntegerField(default=0, null=True)
|
||||
unit = models.IntegerField(default=0, null=True)
|
||||
city_number = models.IntegerField(default=0)
|
||||
city_name = models.CharField(max_length=100, null=True)
|
||||
province_number = models.IntegerField(default=0)
|
||||
province_name = models.CharField(max_length=100, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(SystemAddress, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
# مدل آدرس برای ذخیره آدرس استفاده میشود
|
||||
class Address(BaseModel):
|
||||
title = models.CharField(max_length=200, default="", null=True)
|
||||
country = models.CharField(max_length=100, default="", null=True)
|
||||
province = models.CharField(max_length=50, default="", null=True)
|
||||
city = models.CharField(max_length=50, default="", null=True)
|
||||
address = models.CharField(max_length=300, null=True)
|
||||
postal_code = models.CharField(max_length=20, default="", null=True)
|
||||
breeding_unique_id = models.CharField(max_length=50, null=True)
|
||||
phone = models.CharField(max_length=20, default="", null=True)
|
||||
phone_type = models.CharField(max_length=20, default="", null=True)
|
||||
no = models.CharField(max_length=5, default="", null=True)
|
||||
floor = models.IntegerField(default=0, null=True)
|
||||
unit = models.IntegerField(default=0, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(Address, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
# مدل اطلاعات بانکی برای ذخیره اطلاعات جساب شخص استفاده میشود
|
||||
class BankCard(BaseModel):
|
||||
name_of_bank_user = models.CharField(max_length=200, null=True)
|
||||
bank_name = models.CharField(max_length=30, null=True)
|
||||
card = models.CharField(max_length=16, null=True)
|
||||
shaba = models.CharField(max_length=100, null=True)
|
||||
account = models.CharField(max_length=50, null=True)
|
||||
user_bank_id_key = models.IntegerField(null=True)
|
||||
province_name = models.CharField(max_length=50, null=True)
|
||||
|
||||
# state = models.CharField(max_length=30, null=True)
|
||||
|
||||
|
||||
class MultiRole(BaseModel):
|
||||
user = models.ForeignKey(
|
||||
User, on_delete=models.CASCADE, related_name="multi_role_users", null=True
|
||||
)
|
||||
address = models.ForeignKey(
|
||||
Address,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='multi_role_address',
|
||||
null=True
|
||||
)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(MultiRole, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
# مدل پروفایل کاربری برای ذخیره پروفایل کاربری شخص استفاده میشود
|
||||
class SystemUserProfile(BaseModel):
|
||||
token = models.CharField(max_length=36, null=True)
|
||||
user_gate_way_id = models.CharField(max_length=6,null=True, unique=True)
|
||||
|
||||
user = models.ForeignKey(
|
||||
User, on_delete=models.CASCADE, related_name="system_user_profile_user", null=True
|
||||
)
|
||||
province = models.ForeignKey(
|
||||
Province,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='user_province',
|
||||
null=True
|
||||
)
|
||||
|
||||
city = models.ForeignKey(
|
||||
City,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='user_city',
|
||||
null=True
|
||||
)
|
||||
|
||||
user_django_id_foreign_key = models.IntegerField(null=True)
|
||||
province_id_foreign_key = models.IntegerField(null=True)
|
||||
city_id_foreign_key = models.IntegerField(null=True)
|
||||
system_user_profile_id_key = models.IntegerField(null=True)
|
||||
fullname = models.CharField(max_length=150, null=True)
|
||||
first_name = models.CharField(max_length=200, null=True)
|
||||
last_name = models.CharField(max_length=200, null=True)
|
||||
father_name = models.CharField(max_length=200, null=True)
|
||||
gender = models.CharField(max_length=20, null=True)
|
||||
is_alive = models.BooleanField(null=True)
|
||||
national_code = models.CharField(max_length=20, null=True)
|
||||
national_code_image = models.CharField(max_length=500, null=True)
|
||||
national_id = models.CharField(max_length=20, null=True)
|
||||
mobile = models.CharField(max_length=11, null=True)
|
||||
birthday = models.CharField(max_length=20, null=True)
|
||||
image = models.CharField(max_length=500, null=True)
|
||||
password = models.CharField(max_length=100, null=True)
|
||||
active = models.BooleanField(default=True)
|
||||
state = models.JSONField(
|
||||
default={
|
||||
"province": "",
|
||||
"city": "",
|
||||
"first_name": "",
|
||||
"last_name": "",
|
||||
"national_code": "",
|
||||
"national_id": "",
|
||||
"mobile": "",
|
||||
"birthday": "",
|
||||
"image": ""
|
||||
}
|
||||
)
|
||||
access_level = models.ManyToManyField(
|
||||
PermissionLevel,
|
||||
related_name="user_permission_level"
|
||||
)
|
||||
role = models.ManyToManyField(
|
||||
Group,
|
||||
related_name='user_system_roles'
|
||||
)
|
||||
base_order = models.BigIntegerField(null=True)
|
||||
city_number = models.IntegerField(default=0)
|
||||
city_name = models.CharField(max_length=100, null=True)
|
||||
province_number = models.IntegerField(default=0)
|
||||
province_name = models.CharField(max_length=100, null=True)
|
||||
unit_name = models.CharField(max_length=500, null=True)
|
||||
unit_national_id = models.CharField(max_length=100, null=True)
|
||||
unit_registration_number = models.CharField(max_length=100, null=True)
|
||||
unit_economical_number = models.CharField(max_length=100, null=True)
|
||||
unit_province = models.CharField(max_length=100, null=True)
|
||||
unit_city = models.CharField(max_length=100, null=True)
|
||||
unit_postal_code = models.CharField(max_length=100, null=True)
|
||||
unit_address = models.TextField(null=True)
|
||||
pos = models.BooleanField(default=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.user_gate_way_id is None:
|
||||
while (True):
|
||||
res = ''.join(random.choices(string.ascii_lowercase + string.digits, k=5))
|
||||
res = base_user_gate_way_id + res
|
||||
if not SystemUserProfile.objects.filter(user_gate_way_id=res).exists():
|
||||
break
|
||||
self.user_gate_way_id=res
|
||||
super(SystemUserProfile, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
# مدل پروفایل کاربری برای ذخیره پروفایل کاربری شخص استفاده میشود
|
||||
class UserProfile(BaseModel):
|
||||
key = models.UUIDField(default=uuid.uuid4, editable=True, null=True)
|
||||
token = models.CharField(max_length=36, default="")
|
||||
app_token = models.CharField(max_length=36, null=True)
|
||||
user = models.ForeignKey(
|
||||
User, on_delete=models.CASCADE, related_name="users", null=True
|
||||
)
|
||||
company = models.CharField(max_length=30, null=True)
|
||||
address = models.ForeignKey(
|
||||
Address,
|
||||
on_delete=models.CASCADE,
|
||||
related_name='user_address',
|
||||
null=True
|
||||
)
|
||||
role = models.ForeignKey(
|
||||
Group,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
related_name='user_role'
|
||||
)
|
||||
user_bank_info = models.ForeignKey(
|
||||
BankCard,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="bank_user",
|
||||
null=True
|
||||
)
|
||||
fullname = models.CharField(max_length=150, null=True, default="")
|
||||
first_name = models.CharField(max_length=200, null=True, default="")
|
||||
last_name = models.CharField(max_length=200, null=True, default="")
|
||||
natinal_id = models.CharField(max_length=10, null=True, default="")
|
||||
mobile = models.CharField(max_length=11, null=True, default="")
|
||||
birthday = models.CharField(max_length=20, null=True, default="")
|
||||
image = models.CharField(max_length=500, null=True)
|
||||
state = models.CharField(max_length=20, default="register")
|
||||
unit_name = models.CharField(max_length=100, null=True)
|
||||
password = models.CharField(max_length=100, null=True)
|
||||
gis_code = models.CharField(max_length=30, null=True)
|
||||
operating_licence_capacity = models.BigIntegerField(default=0)
|
||||
number_of_halls = models.IntegerField(default=0)
|
||||
tenant = models.BooleanField(null=True)
|
||||
person_type = models.CharField(max_length=10, null=True)
|
||||
economic_code = models.CharField(max_length=30, null=True)
|
||||
system_code = models.CharField(max_length=20, null=True)
|
||||
epidemiological_code = models.CharField(max_length=20, null=True)
|
||||
breeding_unique_id = models.CharField(max_length=20, null=True)
|
||||
total_capacity = models.BigIntegerField(default=0)
|
||||
licence_number = models.CharField(max_length=20, null=True)
|
||||
health_certificate_number = models.CharField(max_length=20, null=True)
|
||||
number_of_requests = models.BigIntegerField(default=0)
|
||||
hatching_date = models.DateTimeField(default=timezone.now())
|
||||
last_party_date = models.DateTimeField(default=timezone.now())
|
||||
number_of_incubators = models.BigIntegerField(default=0)
|
||||
herd_age_by_day = models.IntegerField(default=0)
|
||||
herd_age_by_week = models.IntegerField(default=0)
|
||||
number_of_party = models.IntegerField(default=0)
|
||||
communication_type = models.CharField(max_length=30, null=True)
|
||||
cooperative = models.CharField(max_length=50, null=True)
|
||||
date_of_register = models.DateTimeField(default=timezone.now())
|
||||
unit_status = models.CharField(max_length=20, null=True)
|
||||
samasat_user_code = models.CharField(max_length=20, null=True)
|
||||
base_order = models.BigIntegerField(null=True)
|
||||
incubation_date = models.DateTimeField(null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
# if self.first_name != None and self.last_name != None:
|
||||
# self.fullname = self.first_name + " " + self.last_name
|
||||
super(UserProfile, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
# مدل نقاط جغرافیایی برای ذخیره نقاط طولی و عرضی آدرس استفاده میشود
|
||||
class GeoPoint(BaseModel):
|
||||
userprofile = models.ForeignKey(
|
||||
UserProfile,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="geo_user",
|
||||
null=True
|
||||
)
|
||||
name = models.CharField(max_length=100, null=True)
|
||||
lang = models.CharField(max_length=50, null=True)
|
||||
lat = models.CharField(max_length=50, null=True)
|
||||
|
||||
|
||||
class Tenant(BaseModel):
|
||||
userprofile = models.ManyToManyField(
|
||||
UserProfile,
|
||||
related_name="tenant_user",
|
||||
)
|
||||
fullname = models.CharField(max_length=50, null=True)
|
||||
national_code = models.CharField(max_length=20, null=True)
|
||||
birthday = models.CharField(max_length=50, null=True)
|
||||
rental = models.CharField(max_length=30, null=True)
|
||||
tracking_code = models.CharField(max_length=30, null=True)
|
||||
rent_date_from = models.CharField(max_length=30, null=True)
|
||||
rent_date_to = models.CharField(max_length=30, null=True)
|
||||
|
||||
|
||||
class UserMessageType(BaseModel):
|
||||
message_types = (
|
||||
("user", "USER"),
|
||||
("alluser", "AllUSER"),
|
||||
("group", "GROUP"),
|
||||
("allgroup", "AllGROUP"),
|
||||
("usergroup", "UserGroup"),
|
||||
("province_accept", "ProvinceAccept"),
|
||||
("province_rejected", "ProvinceRejected"),
|
||||
("city_operator_accept", "CityOperatorAccept"),
|
||||
("city_operator_rejected", "CityOperatorRejected"),
|
||||
("assignment_accepted", "AssignmentAccepted"),
|
||||
("assignment_rejected", "AssignmentRejected"),
|
||||
)
|
||||
name = models.CharField(choices=message_types, max_length=50, default="", null=True)
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.name
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(UserMessageType, self).save(*args, **kwargs)
|
||||
|
||||
pass
|
||||
|
||||
|
||||
# مدل پیام کاربر برای ذخیره پیام کاربر استفاده میشود
|
||||
class UserMessage(BaseModel):
|
||||
roles = models.ManyToManyField(
|
||||
Group,
|
||||
blank=True,
|
||||
related_name="user_roles"
|
||||
)
|
||||
users = models.ManyToManyField(
|
||||
SystemUserProfile,
|
||||
blank=True,
|
||||
related_name="user_message"
|
||||
)
|
||||
sender = models.ForeignKey(
|
||||
SystemUserProfile,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="message_sender",
|
||||
null=True
|
||||
)
|
||||
heading = models.CharField(max_length=100, null=True, default="")
|
||||
message = models.TextField(max_length=500, null=True, default="")
|
||||
link_text = models.CharField(max_length=150, null=True)
|
||||
link = models.CharField(max_length=100, null=True)
|
||||
image = models.JSONField(default=dict, null=True)
|
||||
expire = models.DateTimeField(default=datetime.now() + timedelta(hours=1))
|
||||
time = models.DateTimeField(default=datetime.now())
|
||||
state = models.CharField(max_length=20, default="pending")
|
||||
message_type = models.ForeignKey(
|
||||
UserMessageType,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
related_name="message_type"
|
||||
)
|
||||
message_level = models.CharField(max_length=50, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(UserMessage, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class SendingMessageMethod(BaseModel):
|
||||
level = models.CharField(max_length=50, null=True)
|
||||
methods = models.CharField(max_length=150, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(SendingMessageMethod, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class Log(BaseModel):
|
||||
user = models.ForeignKey(
|
||||
User, on_delete=models.CASCADE, related_name="log_user", null=True
|
||||
)
|
||||
function_name = models.CharField(max_length=200, null=True)
|
||||
duration = models.FloatField(null=True)
|
||||
status = models.IntegerField(null=True)
|
||||
response = models.TextField(null=True)
|
||||
request = models.TextField(null=True)
|
||||
request_body = models.TextField(null=True)
|
||||
response_body = models.TextField(null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(Log, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class ExternalTransaction(BaseModel):
|
||||
date = models.DateTimeField(auto_now_add=True)
|
||||
amount = models.BigIntegerField(default=0)
|
||||
amount_with_tax = models.BigIntegerField(default=0)
|
||||
status = models.CharField(max_length=100, default='pending')
|
||||
transaction_type = models.CharField(max_length=100, null=True)
|
||||
type = models.CharField(max_length=100, null=True)
|
||||
payer = models.CharField(max_length=100, null=True)
|
||||
description = models.CharField(max_length=200, default=False)
|
||||
is_complete = models.BooleanField(default=False)
|
||||
message = models.TextField(null=True)
|
||||
saleReferenceId = models.CharField(max_length=100, null=True)
|
||||
refId = models.CharField(max_length=100, null=True)
|
||||
orderId = models.CharField(max_length=100, null=True)
|
||||
cardHolderPan = models.CharField(max_length=100, null=True)
|
||||
receiver_role = models.CharField(max_length=100, null=True)
|
||||
creator_role = models.CharField(max_length=100, null=True)
|
||||
kill_house_user = models.ForeignKey(
|
||||
SystemUserProfile,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
related_name="transaction_kill_house_user"
|
||||
)
|
||||
chain_company_user = models.ForeignKey(
|
||||
SystemUserProfile,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
related_name="transaction_chain_company_user"
|
||||
)
|
||||
receiver = models.ForeignKey(
|
||||
SystemUserProfile,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
related_name="receiver_user"
|
||||
)
|
||||
creator = models.ForeignKey(
|
||||
SystemUserProfile,
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
related_name="creator_user"
|
||||
)
|
||||
union_share = models.BigIntegerField(default=0)
|
||||
company_share = models.BigIntegerField(default=0)
|
||||
guilds_share = models.BigIntegerField(default=0)
|
||||
city_share = models.BigIntegerField(default=0)
|
||||
wallet_share = models.BigIntegerField(default=0)
|
||||
other_share = models.BigIntegerField(default=0)
|
||||
pay_type = models.CharField(max_length=200, null=True)
|
||||
temporary_trash = models.BooleanField(default=False)
|
||||
temporary_deleted = models.BooleanField(default=False)
|
||||
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(ExternalTransaction, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class UserMessageSend(BaseModel):
|
||||
user = models.ForeignKey(SystemUserProfile, on_delete=models.CASCADE, null=True)
|
||||
message = models.TextField(null=True)
|
||||
receive_code = models.CharField(max_length=400, null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(UserMessageSend, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class Notice(BaseModel):
|
||||
title = models.CharField(max_length=1000, null=True)
|
||||
text = models.TextField(null=True)
|
||||
users = models.JSONField(null=True)
|
||||
read_users = models.JSONField(null=True)
|
||||
unread_users = models.JSONField(null=True)
|
||||
images = models.JSONField(null=True)
|
||||
roles = models.JSONField(null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(Notice, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class UserNoticeInfo(BaseModel):
|
||||
notice = models.ForeignKey(
|
||||
Notice,
|
||||
related_name="user_notice",
|
||||
|
||||
on_delete=models.CASCADE,
|
||||
null=True
|
||||
)
|
||||
user = models.ForeignKey(
|
||||
SystemUserProfile,
|
||||
related_name="notice_users",
|
||||
on_delete=models.CASCADE,
|
||||
null=True
|
||||
)
|
||||
seen = models.BooleanField(default=False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(UserNoticeInfo, self).save(*args, **kwargs)
|
||||
Reference in New Issue
Block a user