Каждый раз, когда создается или обновляется одна модель, я хочу, чтобы она вставляла/изменяла другую модель (один к одному).

Когда создается или изменяется "Заметка", я хочу, чтобы она анализировала ее content и решала, нужно ли создать, обновить или удалить соответствующую запись в "Обзоре".

Я в некотором замешательстве, как это сделать. Должен ли я переопределить функцию save(), чтобы поместить туда эту логику? Какую функцию save() я должен переопределить - Models, Serializer или Views? Кто-нибудь может показать мне пример того, как связать изменения в заметке с созданием/изменением записи в Review?

Models.py

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.conf import settings

class Note(models.Model):
    title =  models.CharField(max_length=1000, blank=True)
    content = models.TextField()
    date_created = models.DateTimeField(auto_now=False,auto_now_add=True)
    date_updated = models.DateTimeField(auto_now=True,auto_now_add=False)
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)


class Review(models.Model):
    note = models.OneToOneField(Note, on_delete=models.CASCADE, primary_key=True)
    easiness = models.DecimalField(decimal_places=3,max_digits=6)
    interval = models.IntegerField()
    repetitions = models.IntegerField()
    due_date = models.DateField(auto_now=False,auto_now_add=False)
    last_reviewed = models.DateField(auto_now=True,auto_now_add=False)

class User(AbstractUser):
    pass
# Create your models here.

Serializers.py

class NoteSerializer(serializers.ModelSerializer):
    #title = serializers.CharField(max_length=1000, required=False)
    class Meta:
        model = models.Note
        fields = ('id','title','content','date_created','date_updated','author')

class ReviewSerializer(serializers.ModelSerializer):
    note = NoteSerializer(read_only=True)
    class Meta:
        model = models.Review
        fields = ('easiness', 'repetitions', 'interval', 'due_date', 'last_reviewed', 'note')

views.py

class NoteViewSet(viewsets.ModelViewSet):

    queryset = models.Note.objects.all()
    serializer_class = NoteSerializer
    permission_classes = (IsAuthenticated,)

    def list(self, request):
        queryset = self.queryset.filter(author=request.user.id)
        serial = NoteSerializer(queryset, many=True)
        return Response(serial.data)

    def create(self, request):
        title = extract_title(request.data['content'])
        rez = {**request.data,'title':title, 'author':request.user.id}
        serial = NoteSerializer(data=rez)
        if serial.is_valid():
            serial.save()
            return Response(serial.data, status=status.HTTP_201_CREATED)
        return Response(serial.errors, status=status.HTTP_400_BAD_REQUEST)

    def update(self, request, pk=None):
        title = extract_title(request.data['content'])
        current_post = models.Note.objects.get(id=pk)
        rez = {**request.data,'title':title, 'author':request.user.id}
        serial = NoteSerializer(current_post, data=rez)
        if serial.is_valid():
            serial.save()
            return Response(serial.data)
        return Response(serial.errors, status=status.HTTP_400_BAD_REQUEST)
Вернуться на верх