#python #django #django-class-based-views
#python #django #представления на основе классов django
Вопрос:
У меня есть эта пользовательская модель пользователя ‘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 и другие сообщения stack overflow, но во всех них внешний ключ ссылается на встроенную пользовательскую модель Django
Ответ №1:
Поэтому просто назначьте es_user, а не пользователя auth.
form.instance.ev_admin = self.request.user.es_user
Комментарии:
1. когда я изменил его, я получаю эту ошибку
self.related.get_accessor_name() django.contrib.auth.models.User.es_user.RelatedObjectDoesNotExist: User has no es_user
.2. Ну, это ясно говорит вам, что для текущего вошедшего в систему пользователя нет es_user. Вы его создали?
3. когда я изменил пользовательское поле es_user на
user = models.OneToOneField(User,related_name='es_user', on_delete=models.CASCADE)
. это сработало, спасибо @Daniel Roseman
Ответ №2:
Вместо этого вы можете получить es_user
:
form.instance.ev_admin = es_user.objects.get(user=self.request.user)
Ответ №3:
все работало нормально, когда я внес некоторые изменения в 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)