Как автоматически установить отношения 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 (владелец) на самом деле является желаемым поведением, так что все хорошо.