Использование JsonField в django для создания простого post api
У меня есть задача создать простой post api для отправки посетителю сообщения через контактную форму. Я создал модель с именем Contacts и создал api с помощью APIView. Но когда код был рассмотрен, мне предложили использовать jsonfield, который уже определен в модели Core. Поэтому я застрял на том, как его использовать.
Моя основная модель выглядит следующим образом:
class Core(models.Model):
"""
Model that saves the corresponding credentials for the slug.
"""
slug = models.CharField(max_length=255, null=False)
example = models.JSONField(null=False, default=dict)
def __str__(self) -> str:
return self.slug
Я искал и нашел, что я могу передать данные словаря внутри поля примера, но я не знаю, как это использовать.
На данный момент я сделал следующее. Я создал модель чуть ниже основной модели под названием Conatcts и создал сериализатор и файлы представления.
class Contacts(models.Model):
full_name = models.CharField(max_length=100,blank=True,default="")
email = models.EmailField()
phone = models.CharField(max_length= 16)
address = models.CharField(max_length=255,blank=True,default="")
message = RichTextField()
def __str__(self):
return self.email
class Meta:
verbose_name_plural = 'Visitor Messages'
Мое мнение:
class ContactsView(APIView):
permission_classes = [AllowAny]
def post(self,request):
data = request.data
serializer = ContactSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response({
'message': "You message has been sent successfully.",
'data':serializer.data #data in the response may not be required
},
status=status.HTTP_201_CREATED,)
return Response (serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
Мой сериализатор:
class ContactSerializer(ModelSerializer):
class Meta:
model = Contacts
fields = '__all__'
Я вижу, что Core model требует некоторого slug. Какой slug я должен передать при отправке простого сообщения от посетителя. И какие изменения я должен сделать в представлении, если использую Core model?
Мои ссылки:
urlpatterns = [
path("core/<slug:slug>", ExampleViewSets.as_view(), name="example"),
path('contacts/', views.ContactsView.as_view(), name='api-contacts')
]