Чтобы скрыть значение поля ForeignKey на основе условия авторизованного пользователя в Django, вы можете использовать функционал Django Forms и атрибут disabled
в HTML. Вот пошаговая инструкция о том, как это сделать:
1. Создайте форму для модели, которая содержит ForeignKey поле. Допустим, у вас есть модель MyModel
с ForeignKey полем my_field
:
from django import forms from .models import MyModel class MyModelForm(forms.ModelForm): class Meta: model = MyModel fields = ['my_field']
2. В шаблоне, где вы отображаете форму, вставьте следующий код:
<form method="post" action="{% url 'your_view_name' %}"> {% csrf_token %} {{ form.as_p }} <input type="submit" value="Save"> </form>
3. Создайте представление, которое будет отображать форму:
from django.shortcuts import render, redirect from .forms import MyModelForm def your_view(request): if request.user.is_authenticated: # Проверяем, является ли пользователь авторизованным form = MyModelForm(request.POST or None) else: form = MyModelForm(request.POST or None, disabled=True) # Передаем аргумент disabled=True в форму if request.method == 'POST': if form.is_valid(): form.save() return redirect('your_success_url') context = {'form': form} return render(request, 'your_template.html', context)
4. Обновите urls.py
, чтобы привязать ваше представление к URL:
from django.urls import path from .views import your_view urlpatterns = [ path('your_url/', your_view, name='your_view_name'), ]
Теперь, если пользователь авторизован, поле ForeignKey будет включено в форму и можно будет выбрать значение. Если пользователь не авторизован, поле будет отключено и нельзя будет выбрать значение. Обратите внимание, что это решение отключает только поле в HTML, а не валидацию и сохранение значений на сервере. Если вам нужно дополнительное исключение значения ForeignKey из валидации и сохранения, вам потребуется дополнительная логика в представлении.