Невозможно создать объект из формы - PullRequest
0 голосов
/ 21 января 2019

После изменения поля, используемого в качестве первичного ключа в модели, я теперь получаю сообщение об ошибке при попытке создать объект из формы.

Я удалил файл базы данных sqlite, все в каталоге миграциии выполнил makemigrations и мигрировать.Я не верю, что проблема с базой данных, скорее что-то в коде больше не работает так же, как теперь, когда я не использую пользовательский первичный ключ.

Как кто-то новичок в Django, я подозреваю, что что-то упустилфундаментальный, но не могу точно определить, что это такое.

views.py

@login_required
def job_create(request):
    client = request.POST.get('client')
    form = JobForm(request.POST or None)
    form.fields['client'].initial = Client.objects.get(client_name=client)
    if request.method == "POST":
        if form.is_valid():
            form.save()
            return JsonResponse({"Success": True})`

models.py

class Client(models.Model):
    client_name = models.CharField(max_length=255, unique=True)
    def __str__(self):
        return self.client_name

class Job(models.Model):
    client = models.ForeignKey(Client, on_delete=models.CASCADE)
    job_number = models.CharField(validators=[RegexValidator(regex='^\d{4}$', message='Invalid job number', code='invalid')], max_length=4, unique=True)
    job_description = models.CharField(max_length=30)

forms.py

class JobForm(forms.ModelForm):
    class Meta:
        model = Job
        fields = ('client', 'job_number', 'job_description',)`

Приведенный выше код не может создать и сохранить объект в базе данных.Ниже моя попытка воссоздать это с помощью оболочки Django:

>>> from myproject.models import Client, Job
>>> from myproject.forms import JobForm
>>> client = Client.objects.get(client_name='John')
>>> jobform = JobForm({'client': client, 'job_description':'This is a job description', 'job_number':'4321'})
>>> jobform.errors
{'client': ['Select a valid choice. That choice is not one of the available choices.']}

Столбцы базы данных

sqlite> PRAGMA table_info(myproject_job);
0|id|integer|1||1
1|job_number|varchar(4)|1||0
2|job_description|varchar(30)|1||0
3|client_id|integer|0||0

Решение на данный момент

@login_required
def job_create(request):
    if request.method == "POST":
        client = Client.objects.get(client_name=request.POST.get("client"))
        request.POST = request.POST.copy()
        request.POST["client"] = client.id
        form = JobForm(request.POST)
        if form.is_valid():
            form.save()
            return JsonResponse({"success": "true"})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...