Как автоматически установить отношения ManyToMany с пользователем

Как автоматически установить поле владельца с пользователем, который создает это событие?

Модель события:

class Event(models.Model):
    title = models.CharField(max_length=50, unique=True)
    describe = models.TextField(max_length=500)
    type_of_event = models.IntegerField(choices=TYPE_OF_EVENT_CHOICE, default=0)
    img = models.ImageField(null=True, blank=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    event_date = models.DateTimeField()
    city = models.ForeignKey(City, verbose_name='City', on_delete=models.CASCADE)
    address = models.CharField(max_length=60)
    ticket_price = models.IntegerField(default=0)
    email = models.EmailField(max_length=100, verbose_name='Contact email',
                              validators=[validate_email])

Вид события:

class CreateEventView(generics.CreateAPIView):
    serializer_class = EventDetailSerializer
    permission_classes = [IsAuthenticated]

Сериализатор события:

class EventDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = Event
        fields = ['title', 'img', 'type_of_event', 'describe', 'event_date', 'city', 'address',
                  'ticket_price', 'email']

Вы можете достичь этого, переопределив метод perform_create вашего CreateEventView, примерно так:

class CreateEventView(generics.CreateAPIView):
    serializer_class = EventDetailSerializer
    permission_classes = [IsAuthenticated]

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

Как указал Дэвид, помните, что ForeignKey - это не отношение "многие ко многим", это было бы ManyToManyField. Учитывая контекст, я предполагаю, что ForeignKey (владелец) на самом деле является желаемым поведением, так что все хорошо.

Вернуться на верх