@Enter_a_nickname

Many-to-many или ForeignKey?

В моем проекте django необходимо реализовать api с методом get.
Вот часть моего кода:

models.py:

class Color(models.Model):
    temp = models.IntegerField(max_value=None, min_value=1)
    correct = models.BooleanField()
    top = models.IntegerField(max_value=None, min_value=1)
    bottom = models.IntegerField(max_value=None, min_value=1)

class Speed(models.Model):
    start = models.TimeField()
    end = models.TimeField()

class Dog(models.Model):
    name = models.CharField(max_length=50)
    number = models.IntegerField(max_value=None, min_value=1)
    speed = models.ForeignKey('Speed', on_delete=models.CASCADE, null=True, blank=True)

class DogRequest(models.Model):
    id_name = models.IntegerField(max_value=None, min_value=1)
    colors = models.ForeignKey('color', on_delete=models.CASCADE, null=True, blank=True)
    dogs = models.ForeignKey('dog', on_delete=models.CASCADE, null=True, blank=True)
    DataTime = models.DateTimeField()


serializers.py:

class ColorSerilizer(serializers.Serializer):
    temp = serializers.IntegerField(max_value=None, min_value=1)
    correct = serializers.BooleanField()
    top = serializers.IntegerField(max_value=None, min_value=1)
    bottom = serializers.IntegerField(max_value=None, min_value=1)

class SpeedSerializer(serializers.Serializer):
    start = serializers.TimeField()
    end = serializers.TimeField()

class DogSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=50)
    number = serializers.IntegerField(max_value=None, min_value=1)
    speed = SpeedSerializer()

class DogRequestSerializer(serializers.Serializer):
    id_name = serializers.IntegerField(max_value=None, min_value=1)
    color = ColorSerilizer()
    dog = DogSerializer()
    DataTime = serializers.DateTimeField()


мой views.py:

@csrf_exempt
def DogRequestApi(request, id=0):
    if 'GET' == request.method:
        DogRequests = DogRequest.objects.all()
         DogRequest_serializer = DogRequestSerializer(DogRequests)
        return JsonResponse(DogRequest_serializer.data, safe=False)


При проведении запроса get через постман я получаю следующую структуру:

{
    "id_name": 44,
    "color": {
        "temp": 33,
        "correct": true,
        "top": 33,
        "bottom": 33,
    },
    "dog": {
        "name": "bobi",
        "number": 33,
        "speed": {
            "start": "10:07:21",
            "end": "10:07:22"
        }
    },
    "DataTime": "2022-02-11T10:07:29Z"


Необходимо исправить один нюанс, блоков "dog" может быть несколько.
Как сделать следующую структуру?

{
    "id_name": 44,
    "color": {
        "temp": 33,
        "correct": true,
        "top": 33,
        "bottom": 33,
    },
    "dog": [{
        "name": "bobi",
        "number": 33,
        "speed": {
            "start": "10:07:21",
            "end": "10:07:22"
        }
    },
    "DataTime": "2022-02-11T10:07:29Z"
   }]...


И так, суть вопроса:
1) мне необходимо, чтобы DogRequest мог иметь несколько Dog, а Dog мог относиться только к 1 DogRequest. На сколько я понял из документации джанго отношение "многие к одному" это как раз и есть ForeignKey. Так это или все-таки необходимо использовать many-to-many?
2) Как написать данные модели в моем случае?
  • Вопрос задан
  • 143 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы