Как установить внешний ключ для пользовательской модели в CreateView? - PullRequest
0 голосов
/ 17 марта 2019

У меня есть эта пользовательская модель 'es_user'

models.py

class es_user(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)

class es_event(models.Model):
    ev_name = models.CharField(max_length=100)
    ev_venue = models.CharField(max_length=100)
    ev_admin =  models.ForeignKey('es_user',related_name='events',on_delete=None)

Со временем я добавлю больше полей в es_user, поэтому я использовал пользовательскую модель пользователя. Поэтому я не могу согласиться со встроенной моделью пользователя django.

views.py

class CreateEventView(LoginRequiredMixin,CreateView):
    model = es_event
    fields = ['ev_name','ev_venue','ev_date','ev_description']
    def form_valid(self, form):
        form.instance.ev_admin = self.request.user
        return super(CreateEventView, self).form_valid(form)

когда я отправляю форму, я получаю эту ошибку

Cannot assign "<SimpleLazyObject: <User: randy>>": "es_event.ev_admin" must be a "es_user" instance.

Я проверил документацию Django и другие сообщения о переполнении стека, но во всех них внешний ключ ссылается на встроенную пользовательскую модель Django

Ответы [ 3 ]

1 голос
/ 17 марта 2019

Так что просто назначьте es_user, а не пользователя auth.

form.instance.ev_admin = self.request.user.es_user
0 голосов
/ 17 марта 2019

все работало нормально, когда я внес некоторые изменения в views.py и models.py

views.py

class CreateEventView(LoginRequiredMixin,CreateView):
model = es_event
fields = ['ev_name','ev_venue','ev_date','ev_description']
def form_valid(self, form):
    form.instance.ev_admin = self.request.user.es_user

models.py

class es_user(models.Model):
      user = models.OneToOneField(User,related_name='es_user', on_delete=models.CASCADE)
0 голосов
/ 17 марта 2019

Вы можете получить es_user вместо:

form.instance.ev_admin = es_user.objects.get(user=self.request.user)
...