Код: Выделить всё
../apps/models.pyКод: Выделить всё
class GroupingTypes(models.Model):
grouping_name = models.CharField(max_length=255, unique=True)
description = models.TextField(null=True, blank=True)
class Meta:
db_table = 'grouping_types'
class Templates(models.Model):
id = models.UUIDField(primary_key=True, default=None, editable=False)
...
name = models.CharField(max_length=255, default=None)
grouping = models.ForeignKey(GroupingTypes, on_delete=models.CASCADE)
file = models.FileField(upload_to="templates/")
...
class Meta:
db_table = 'templates'
def delete(self, *args, **kwargs):
if self.file and os.path.isfile(self.file.path):
os.remove(self.file.path)
super().delete(*args, **kwargs)
Код: Выделить всё
../apps/serializers.pyКод: Выделить всё
class GroupingTypesSerializer(serializers.ModelSerializer):
class Meta:
model = GroupingTypes
fields = "__all__"
class TemplatesSerializer(serializers.ModelSerializer):
# Extra fields that's not defined in models
unix_timestamp_added = serializers.SerializerMethodField()
datetime_added = serializers.SerializerMethodField()
def get_unix_timestamp_added(self, obj: Templates):
return int(obj.timestamp_added.timestamp())
def get_datetime_added(self, obj: Templates):
return obj.timestamp_added.strftime("%Y-%m-%d %H:%M:%S")
grouping = GroupingTypesSerializer(read_only=True)
class Meta:
model = Templates
fields = "__all__"
extra_kwargs = {
'file': {'write_only': True}
}
Код: Выделить всё
../apps/views.pyКод: Выделить всё
# `../utils/utils.py`
def post(request: HttpRequest, Serializer: serializers.ModelSerializer):
serializer = Serializer(data=request.data)
if serializer.is_valid():
serializer.save()
print(f"\033[92mPOST\033[0m")
return Response(
{
"success": True,
"msg": "added",
"data": None,
},
status=HTTP_201_CREATED
)
print(f"\033[91mPOST\033[0m")
return Response(
{
"success": False,
"msg": serializer.errors,
"data": None,
},
status=HTTP_400_BAD_REQUEST
)
# -------------------------------------------
# views.py
class TemplatesList(APIView):
def get(self, request: HttpRequest):
...
def post(self. request: HttpRequest):
return utils.utils.post(request, Serializer=TemplatesSerializer)
Код: Выделить всё
../apps/urls.py Код: Выделить всё
urlpatterns = [
...
path("template/", TemplatesList.as_view()),
path("template//", TemplatesDetail.as_view()),
...
]
Код: Выделить всё
django.db.utils.IntegrityError: null value in column "grouping_id" of relation "templates" violates not-null constraint
DETAIL: Failing row contains (828b0759-0642-4844-abfa-1b5b602a27d2, ..., TEMPLATE-NAME, null, templates/new-template_OQggWfx.xlsx, ...).
Код: Выделить всё
{
"id": uuid.uuid4(),
...,
"name": "TEMPLATE-NAME",
"grouping": 7,
"file": InMemoryUploadedFile,
...
}
Код: Выделить всё
grouping = GroupingTypesSerializer(read_only=True)
Подробнее здесь: https://stackoverflow.com/questions/789 ... r-get-post