@blackbb

Как поле user сделать default current user?

Есть модель:
class Hotels(models.Model):
    title = models.CharField(max_length=200, verbose_name="Название")
    slug = models.SlugField(unique=True, verbose_name="URL")
    category = models.ForeignKey(Category, verbose_name='Тип обьявления')
    user = models.ForeignKey(User)
    ....


И форма модели:
class HotelsForm(forms.ModelForm):
    class Meta:
        model = Hotels
        ....


views.py
def add_hotels(request):
    if request.method == 'POST':
        formset = HotelsForm(request.POST, request.FILES)
        if formset.is_valid()
            formset.save()
            return redirect('/user/success')
        else:
            print formset.errors
    else:
        formset = HotelsForm()
    return render(request, 'add_hotels.html', {'formset': formset})

Как сделать, чтобы поле user заполнялось автоматом, а не предлагало на выбор пользователей?
  • Вопрос задан
  • 497 просмотров
Решения вопроса 1
@marazmiki
Укротитель питонов
Во-первых, убрать это поле из формы

class HotelsForm(forms.ModelForm):
    class Meta:
        model = Hotels
        exclude = ['user']


Во-вторых, во вьюхе подставлять значение:

def add_hotels(request):
    if request.method == 'POST':
        formset = HotelsForm(request.POST, request.FILES)
        if formset.is_valid()
            hotels = formset.save(commit=False)   # Пока не записывать изменения в БД
            hotels.user = request.user
            hotels.save() # Теперь можно записать
            return redirect('/user/success')
        else:
            print formset.errors
    else:
        formset = HotelsForm()
    return render(request, 'add_hotels.html', {'formset': formset})
Непонятно только, почему обычная форма называется формсетом. И почему модель названа во множественном числе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы