Как получить доступ к «pk», созданному тестом «self.client.post ()» - PullRequest
0 голосов
/ 05 мая 2018

Вот мой тест:

def test_CreateEmployeeProfileView_redirect_on_success(
                                                    self):
    response = self.client.post(
        reverse('service:create_employee_profile'), {
                'first_name': 'Test',        # Required
                'middile_name': 'Testy',     # Optional
                'last_name': 'Testman',      # Required
                'employee_choices': 'E',     # Required
                })
    self.assertRedirects(response,
        expected_url=reverse('service:customer_employee_profile_detail', kwargs={'pk':response.pk}),
        status_code=302,
        target_status_code=200,
        )

Я знаю, что это работает, если я изменю response.pk на 1. Есть ли способ получить pk объекта post, не запрашивая его? Или он не получает pk до тех пор, пока не будет post отредактирован и сохранен? pk является autointegerfield

model.py

class Name(models.Model):
key = models.AutoField(
    primary_key=True,
    )
first_name = models.CharField(
    "First Name",
    max_length=100,
    )
middle_name = models.CharField(
    "Middle Name or Initial",
    max_length=100,
    blank=True,
    )
last_name = models.CharField(
    "Last Name",
    max_length=200,
    )
    class Meta:
    abstract = True
    ordering = ['last_name', 'first_name', 'middle_name']
class CustomerEmployeeName(Name):
CUSTOMER = 'C'
EMPLOYEE = 'E'
EMPLOYEE_CHOICES = (
    (EMPLOYEE, 'Yes'),
    (CUSTOMER, 'No'),
    )
employee_choices = models.CharField(
    "Employee",
    max_length=1,
    choices=EMPLOYEE_CHOICES,
    )

def get_absolute_url(self):
    return reverse('service:customer_employee_profile_detail',
                    kwargs={'pk': self.pk})

form.py

class EmployeeNameForm(ModelForm):


class Meta:
    model = CustomerEmployeeName
    fields = [
        'employee_choices',
        'first_name',
        'middle_name',
        'last_name',
        ]

    widgets = {
        'middle_name': TextInput(
            attrs={
                'placeholder': 'Middle Name (optional)',
                }),
        }

    error_messages = {
        'employee_choices': {
            'required': _('Required'),
            },
        }

view.py

def create_employee_profile(request):

if request.POST:
    name_form = EmployeeNameForm(request.POST)

    if name_form.is_valid():
        new_name_form = name_form.save()
        return redirect(new_name_form)

    else:
        return render(request,
                'service/template_create_employee_profile.html',
                    {'name_form': name_form}
                    )

else:
    name_form = EmployeeNameForm(
                    initial={'employee_choices': 'E'}
                    )
    return render(request,
                'service/template_create_employee_profile.html',
                {'name_form': name_form}
                )

Формат немного отключен. Дети впадают в бешенство.

1 Ответ

0 голосов
/ 05 мая 2018

значение pk (или идентификатор) объекта создается автоматически на уровне модели. Если ваш взгляд не позволяет клиенту опубликовать пользовательский идентификатор с полезной нагрузкой

{
   'first_name': 'Test',        # Required
   'middile_name': 'Testy',     # Optional
   'last_name': 'Testman',      # Required
   'employee_choices': 'E',     # Required
   'pk' : 3 # Optional id you may provide if your viewset handles it
}

тогда идентификатор (который вы называете response.pk) может вернуться в ответ только после его создания в базе данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...