Django Отношение "многие ко многим", не знаю, как его использовать (запрос get и post)
Я пытаюсь использовать свою модель с M2M отношениями и пытаюсь получить все значения из GET запроса. Также я использую API под названием random quotes, который можно найти здесь: https://rapidapi.com/martin.svoboda/api/quotes15/
Вот мой models.py:
from django.db import models
class Tag(models.Model):
tag = models.CharField(max_length=50)
def __str__(self):
return str(self.id)+". "+str(self.tag)
class Quote(models.Model):
frase = models.TextField()
autor = models.CharField(max_length=150)
tags = models.ManyToManyField(Tag)
def __str__(self):
return str(self.id)+". "+str(self.autor)
А вот мой views.py, где я использую функции API GET и POST:
from django.shortcuts import render, redirect
import requests
from .models import Quote
from .models import Tag
from rest_framework.decorators import api_view
from rest_framework.response import Response
from django.http import Http404
from .serializers import QuoteSerializer, TagSerializer
@api_view(['GET', 'POST'])
def api_quotes(request):
if request.method == 'POST':
new_quote_data = request.data
quote = Quote()
quote.id = new_quote_data['id']
quote.frase = new_quote_data['frase']
quote.autor = new_quote_data['autor']
quote.tag = new_quote_data['tags']
quote.save()
url = "https://quotes15.p.rapidapi.com/quotes/random/"
querystring = {"language_code":"pt"}
headers = {
'x-rapidapi-host': "quotes15.p.rapidapi.com",
'x-rapidapi-key': "4a3bce6d8cmsh044349ed231bf95p15f17ajsn846aa4e94d98"
}
r = requests.get(url , querystring, headers=headers)
quote_json = r.json()
print(quote_json)
id = quote_json['id']
print(id)
frase = quote_json['content']
autor = quote_json['originator']['name']
tags = quote_json['tags'] #LISTA de tags, os números não aparecem
print(tags)
new_quote = Quote()
new_tag = Tag()
new_quote.id = id
new_quote.frase = frase
new_quote.autor = autor
new_tag.tag = tags
# obj = Pessoa.objects.get(pk=1) # get the object
# obj.ccir_set.all()
# new_quote.tags.set(new_tag.tag)
# print("OLHA AÍ: ", new_quote.tags.set(tags))
print("OLHA Aì: ", new_quote.set(tags))
# tags = TagSerializer(new_tag)
# new_quote.tags = tags.set()
quotes = Quote.objects.all()
serialized_quote = QuoteSerializer(new_quote)
# serialized_tag = TagSerializer(new_tag)
return Response(serialized_quote.data)
def index(request):
if request.method == 'POST':
frase = request.POST.get('frase')
autor = request.POST.get('autor')
# tagNome = request.POST.get('tags')
# request.add(tagNome)
quote = Quote(frase = frase, autor = autor)
quote.save()
return redirect('index')
else:
all_quotes = Quote.objects.all()
all_tags = Tag.objects.all()
print(all_quotes)
return render(request, 'quotes/index.html', {'quotes': all_quotes, 'tags': all_tags})
Если нужно, вот файл serializers.py:
from rest_framework import serializers
from .models import Quote, Tag
class TagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
class QuoteSerializer(serializers.ModelSerializer):
tags = TagSerializer(read_only = True, many=True)
class Meta:
model = Quote
fields = ['id', 'frase', 'autor', 'tags']
Наконец, я также хотел бы знать, следует ли и где использовать .set() или любую другую команду.