1
私はDjangoモデルのformset factoryを使って、ユーザーが画像を追加してアップロードした画像を変更できるテンプレートをレンダリングしようとしています(管理者の作業とよく似ています)。私は現在、テンプレートとその正しいフィールドをテンプレートにレンダリングすることができます。私ができないことは、ユーザーが事前に選択されていることです(現在ログインしています)。ページを更新すると、画像が再度投稿されます(これが予防可能かどうかはわかりません)。以下は私のコードです。ありがとう!Djangoモデルのフォームセットの工場とフォーム
モデル:
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" />
実装しようとすると:エラーuth.User.groups:(fields.E304)を取得し続けます。 'User.groups'の逆引きアクセサが 'UserModel.groups'の逆引きアクセサと衝突します。 \tヒント: 'User.groups'または 'UserModel.groups'の定義にrelated_name引数を追加または変更します。 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