Я пытаюсь создать фабрику форм Django для создания шаблона, где пользователь может добавлять изображения и изменять загруженные ими изображения (очень похоже на то, что можно сделать в админке). В настоящее время я могу отобразить шаблон и его правильные поля в шаблоне. То, что я не могу сделать, - это предварительный выбор пользователем (в настоящее время вошедший в систему), и когда я обновляю страницу, изображение снова будет опубликовано (не уверен, что это можно предотвратить). Ниже мой код. Благодаря!Django model formset factory and forms
Модель:
class Image(models.Model):
user = models.ForeignKey(User)
image = models.ImageField(upload_to=content_file_name, null=True, blank=True)
link = models.CharField(max_length=256, blank=True)
Форма:
class ImageForm(forms.ModelForm):
image = forms.ImageField(label='Image')
class Meta:
model = Image
fields = ('image',
'link',
)
Вид:
@login_required
def register(request):
user_data = User.objects.get(id=request.user.id)
ImageFormSet = modelformset_factory(Image,
fields=('user', 'image', 'link'), extra=3)
if request.method == 'POST':
print '1'
formset = ImageFormSet(request.POST, request.FILES, queryset=Image.objects.all())
if formset.is_valid():
formset.user = request.user
formset.save()
return render(request, 'portal/register.html', {'formset': formset, 'user_data': user_data})
else:
print '2'
formset = ImageFormSet(queryset=Image.objects.all())
return render(request, 'portal/register.html', {'formset': formset, 'user_data': user_data})
Шаблон:
<form id="" method="post" action=""
enctype="multipart/form-data">
{% csrf_token %}
{{ formset.management_form }}
{% for form in formset %}
{{ form }}
{% endfor %}
<input type="submit" name="submit" value="Submit" />
Когда я пытаюсь реализовать, я продолжаю получать: error uth.User.groups: (fields.E304) Обратный аксессор для столкновений «User.groups» с обратным доступом для «UserModel.groups». \t СОВЕТ: добавьте или измените аргумент related_name в определение для «User.groups» или «UserModel.groups». auth.User.user_permissions: (fields.E304) Обратный аксессор для столкновений «User.user_permissions» с обратным доступом для «UserModel.user_permissions». – Ryan113
Итак, вам нужно установить django-custom-user, а затем в settings.py добавить эту строку: AUTH_USER_MODEL = 'app.UserModel'. Эта модель перезаписывает настройки Django по умолчанию для пользователя. Дополнительная информация: https://github.com/jcugat/django-custom-user – marin