Lütfen bunu bir soru göz önünde bulundurun. Belki birisi aşağıdaki çözümlerinden birini kullanacaktır.Django kullanıcısı HiddenInput vs. Sınıf Tabanlı Görünümlerle doğrudan görüntülemeye kaydetme
ForeignKey(User)
alanı içeren birkaç modelim var. Sınıf tabanlı oluşturma görünümlerim, jenerik CreateView
'dan türetilmiştir. Yeni bir nesne eklerken ilişkili kullanıcıyı kaydetmek için iki seçenek vardır
:
form_valid
yöntemi geçersiz kılarak görünümlerde formu kaydetme; Gizli alanında kullanıcı kimliği saklı (ve açıkta) ile formu kaydetmeclass CreateOfferView(CreateView): model = Offer form_class = SomeModelFormWithUserFieldExcluded def form_valid(self, form): instance = form.save(commit=False) instance.user = self.request.user instance.save()
bu
user_id
göstermiyor (ve diğer burada maruz kalmamalıdır verileri belirtilmeyen). İşte zor kısmı. Kullanıcı alanıyla daha fazla model var ... Bir form oluştururken, kullanıcı alanını başlangıçta (o anda oturum açmış) kullanıcı ile doldurmam gerekiyor ve ayrıca bu alanı gizli tutmam gerekiyor. Bu amaçla ben kullandım benimOwnFormMixin
class OwnFormMixin(object): def get_form(self, form_class): form = super(OwnFormMixin, self).get_form(form_class) form.fields['user'].widget = forms.HiddenInput() def get_initial(self): initial = super(OwnFormMixin, self).get_initial() initial['user'] = self.request.user.pk #I could also do this in get_form() with form.fields['user'].initial class CreateOfferView(OwnFormMixin, CreateView): model = Offer form_class = SomeModelFormWithAllFields
vardır daha CreateXXXView
kullanarak OwnFormMixin
.. Eğer formlarda kullanıcı verileri kaydetmek nasıl
?
Doğrudan görünümlerinize kaydederek gizli mi? Artıları/eksileri nelerdir? Eğer kullanıcıların o ForeignKeyField
değiştirmek izin sürece
Neden doğrulamada request.user kullanıyorsunuz? POST a'ya başka bir kullanıcıdan yanıt verme olasılığı var mı? Neden django Kullanıcı verileriyle ilgili herhangi bir formu veya herhangi bir görünür parçayı oluşturabiliriz. Bu bir potansiyel güvenlik açığı ... – garmoncheg