Django сохранение формы с уникальным ограничением - PullRequest
1 голос
/ 26 февраля 2020

У меня есть простая модель профиля, связанная с моделью пользователя Djang, которая хранит псевдоним.

У псевдонима есть уникальное ограничение в модели.

Чтобы обновить псевдоним, я создал модель формы, но не могу понять, как исключить уникальное ограничение, когда пользователь просто нажимает sh кнопку отправки без изменения псевдонима. Форма вызывает ошибку из-за уникального ограничения.

Вот определение модели и формы с частью представления, которая обрабатывает форму:

models.py

class Profile(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )

    alias = models.CharField(
        "Alias",
        max_length=50,
        unique=True,
        null=True
    )

forms.py

class ProfileForm(ModelForm):
    class Meta:
        model = Profile
        fields = ['alias', ]

и views.py

def membership(request):
    if request.method != 'POST':
        profile = Profile.objects.get(user=request.user)
        form = ProfileForm(initial={'alias': profile.alias, 'user': request.user})
    elif request.POST.get('profile_update', None) == 'profile_update':
        form = ProfileForm(request.POST)
        if form.is_valid():
            form.save()

1 Ответ

2 голосов
/ 26 февраля 2020

Вам нужно передать экземпляр в форму. Я также отключил ключ псевдонима в форме пути GET с использованием экземпляра.

def membership(request):
    profile = Profile.objects.get(user=request.user)
    if request.method != 'POST':
        form = ProfileForm(instance=profile, initial={'user': request.user})
    elif request.POST.get('profile_update', None) == 'profile_update':
        form = ProfileForm(request.POST, instance=profile)
        if form.is_valid():
            form.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...