Konstantin18ko
@Konstantin18ko
Стоматолог

Почему не воспринимает поле creator (creator_id)?

Есть модель.
model.py
class patient(models.Model):
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=150)
    patronymic = models.CharField(max_length=150)
    birthday = models.DateField(max_length=150)
    gender = models.ForeignKey(gender, default=None, null=True, on_delete=models.CASCADE)
    creator = models.ForeignKey(User, related_name='creator', on_delete=models.CASCADE)
    create_date = models.DateField()
    create_time = models.TimeField()
    editor = models.ForeignKey(User, related_name='editor', default=None, null=True, on_delete=models.CASCADE)
    edit_date = models.DateField(default=None, null=True)
    edit_time = models.TimeField(default=None, null=True)

    def __str__(self):
        return '{0} {1} {2}'.format(self.last_name, self.first_name, self.patronymic)

    class Meta:
        verbose_name = 'Пациент'
        verbose_name_plural = "Пациенты"


forms.py
class form_patient(forms.ModelForm):
    last_name = forms.CharField(label='Фамилия', widget=forms.TextInput(
        attrs={'class': 'form-control'}
    ))
    first_name = forms.CharField(label='Имя', widget=forms.TextInput(
        attrs={'class': 'form-control'}
    ))
    patronymic = forms.CharField(label='Отчество', widget=forms.TextInput(
        attrs={'class': 'form-control'}
    ))
    birthday = forms.DateField(label='Дата рождения', widget=forms.DateInput(
        attrs={'class': 'form-control', 'type': 'date'}
    ))
    gender = forms.ModelChoiceField(label='Пол', queryset=gender.objects.all(), widget=forms.Select(
        attrs={'class': 'form-control'}
    ))
    creator = forms.ModelChoiceField(label='Создатель', queryset=User.objects.all(), widget=forms.HiddenInput(
        attrs={'class': 'form-control'}
    ))
    create_date = forms.DateField(widget=forms.HiddenInput, required=False)
    create_time = forms.TimeField(widget=forms.HiddenInput, required=False)

    class Meta:
        model = patient
        fields = ['last_name', 'first_name', 'patronymic', 'birthday', 'gender']


views.py
from django.shortcuts import render
from PATIENT.forms import *
import datetime


# Create your views here.
def patient(request):
    if request.user.is_authenticated:
        patient_form = form_patient(request.POST or None,
                                    initial={
                                        'creator': request.user,
                                        'create_time': format(datetime.datetime.now(), '%Y-%m-%d'),
                                        'create_time': format(datetime.datetime.now(), '%H:%M')
                                    })
        print(patient_form.data)
        if request.POST and patient_form.is_valid():
            patient_form.save()
        return render(request, 'patient/patient.html', locals())
    else:
        return render(request, 'staff/login.html', locals())


Вот такие данные я получаю:
<QueryDict: {'first_name': ['Виктор'], 'birthday': ['1964-12-23'], 'csrfmiddlewaretoken': ['wZUn4NINjXbJNOdA8cXQgPJDW0qCihRmVHoyUjbpEgkUHqp8uwkm6DduDTQHYUCq'], 'create_date': [''], 'creator': ['1'], 'gender': ['2'], 'patronymic': ['Егорович'], 'create_time': ['12:10'], 'last_name': ['Катюшин']}>


И мне выдает такую ошибку.
(1048, "Column 'creator_id' cannot be null")
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 2
rSedoy
@rSedoy
Python/Django
1. Название класса должно быть с большой буквы
2. Для DateField не нужно max_length=150
3. откройте для себя DateTimeField
и прочее.. ваш код трудно читать

А по вопросу, обычно creator вообще исключают из формы и добавляю при сохранении после form.is_valid()
ЗЫ, а вот еще заметил, в форме fields = ['last_name', 'first_name', 'patronymic', 'birthday', 'gender'] так что возможно из-за этого и игнорируется creator.
Ответ написан
s41blizzard
@s41blizzard
Надо смотреть, как у вас заполняется это поле в базе. Оно обязательно к заполнению, у вас же по какой-то причине остается пустым.
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
19 авг. 2018, в 18:43
2000 руб./за проект
19 авг. 2018, в 17:11
200000 руб./за проект
19 авг. 2018, в 12:12
40000 руб./в месяц