在ModelForm中,我必须测试用户权限,让他们填写正确的字段:
它的定义如下:
class TitleForm(ModelForm):
def __init__(self, user, *args, **kwargs):
super(TitleForm,self).__init__(*args, **kwargs)
choices = ['','----------------']
# company
if user.has_perm("myapp.perm_company"):
self.fields['company'] = forms.ModelChoiceField(widget=forms.HiddenInput(),
queryset=Company.objects.all(), required=False)
choices.append(1,'Company')
# association
if user.has_perm("myapp.perm_association")
self.fields['association'] =
forms.ModelChoiceField(widget=forms.HiddenInput(),
queryset=Association.objects.all(), required=False)
choices.append(2,'Association')
# choices
self.fields['type_resource'] = forms.ChoiceField(choices = choices)
class Meta:
Model = Title
Run Code Online (Sandbox Code Playgroud)
这个ModelForm可以完成这项工作:我隐藏了模板上的每个字段,并且由于javascript而使它们出现......
问题是这个ModelForm是模型中定义的每个字段都将显示在模板上.
如果不需要,我想从表单中删除它们:
例如:如果用户对模型公司没有权利,则不会在模板中的呈现形式中使用它.
问题是你必须将字段列表放在带有字段或排除属性的表单的Meta类中,但我不知道如何动态地管理它们.
任何的想法??
感谢提前回答任何问题.
django文档建议我可以在模板中识别隐藏/可见字段.我有两个模型,AddressInfo和PharmacyInfo.我需要从一个页面输入两个表的数据.我想隐藏address_id字段(来自PharmacyInfo模型).我目前有:
{% for form in formset %}
{% if form.non_field_errors %}
<div class="form_errors">
{{ form.non_field_errors }}
</div>
{% endif %}
{% for field in form.visible_fields%}
<div class="field_content">
<label>{{field.label_tag }}</label>
<div class="field">
{% if field.help_text %}
<div class = "help_text">
{{ field.help_text }}
</div>
{% endif %}
{{ field }}
{{ field.errors }}
</div>
</div>
{% endfor %}
{% endfor %}
class PharmForm(ModelForm):
class Meta:
model = PharmInfo
widgets = {
'address_id': forms.HiddenInput()
}
class AddressForm(ModelForm):
class Meta:
model = AddressInfo …Run Code Online (Sandbox Code Playgroud) 我查看过相关问题,但没有一个答案似乎有效.我正在尝试为用户上传个人资料图片,并让它替换(覆盖)当前图像.保存图像后,我想将文件名更改为用户ID.在它的当前形式中,图像将上传,但它不会替换现有图像(例如,它将保存为2_1.png).
class PhotoForm(forms.ModelForm):
def save(self):
content_type = self.cleaned_data['photo'].content_type.split('/')[-1]
filename = '%d.%s' % (self.instance.user.id, content_type)
instance = super(PhotoForm, self).save(commit=False)
instance.photo = SimpleUploadedFile(filename, self.cleaned_data['photo'].read(), content_type)
instance.save()
return instance
class Meta:
model = UserProfile
fields = ('photo',)
def photo_form(request):
if request.method == 'POST':
form = PhotoForm(data=request.POST, file=request.FILES, instance=request.user.get_profile())
if form.is_valid():
form.save()
else:
form = PhotoForm()
return render(request, 'photo_form.html', {'form': form})
Run Code Online (Sandbox Code Playgroud) 我有一个具有以下代码的模型:
class PhillyCheese(models.Model):
description = models.CharField(blank=True, max_length=255)
quality = models.CharField(blank=True, max_length=255)
packing_date = models.DateField(blank=True, null=True)
shipping_date = models.DateField(blank=True, null=True)
taste = models.CharField(blank=True, max_length=255)
Run Code Online (Sandbox Code Playgroud)
和表格:
class PhillyCheeseForm(forms.ModelForm):
class Meta:
model = PhillyCheese
Run Code Online (Sandbox Code Playgroud)
我正在尝试将jquery datepicker应用于模型中的两个DateField.唯一的问题是,我想确切地知道它在哪个领域.修改模板不是一种选择; 我有许多其他可能通过该模板呈现的形式.
有人可以告诉我如何添加自定义ID /类/名称,以便我可以使用Jquery准确识别DateFields吗?
我无法弄清楚如何控制模型表单的字段验证。
这是我的表格模型:
class UserForm(ModelForm):
class Meta:
model = User
fields = ('email', 'password')
Run Code Online (Sandbox Code Playgroud)
以下是我在模板中呈现表单的方式:
<form method="post" action="">
{% csrf_token %}
{{ userform.as_p }}
<input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
def login_page(request):
if request.method == 'POST':
userform = UserForm(request.POST)
if userform.is_valid():
email = request.POST['email']
password = request.POST['password']
user = authenticate(username=email, password=password)
if user is not None:
login(request, user)
return redirect('/dashboard/')
else:
# How can I give the user feedback about authentication failute here. Right now it just reloads the form without …Run Code Online (Sandbox Code Playgroud) 我在django ModelForm中有一些必要的字段.如何在必填字段后添加红星(*)?
我是Django和Python的新手,并且花了几天时间试图解决这个问题.我在其他线程中尝试了几种方法,但我认为我缺少一些基本概念,因为它们都没有为我工作.这是我正在尝试做的事情:
我正在使用ModelForm,并且我已经创建了一个用于添加包含外键的记录的表单.我希望默认情况下设置此值以匹配我链接的页面上显示的记录.[编辑后显示的代码显示建议的更正].
这是来自views.py的相关代码:
def add_sighting(request):
unit = request.GET.get('unit')
form = SightingForm(request.POST or None, initial={'unit':unit})
if form.is_valid():
sighting = form.save(commit=False)
sighting.save()
return redirect(index)
return render_to_response('trainapp/add_sighting_form.html',
{'unit': unit, 'sighting_form': form},
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
以下是add_sighting_form.html的相关代码:
<form action="/trainapp/add_sighting/" method="post">
{% csrf_token %}
<table>
{{ sighting_form.as_table }}
</table>
<input type="submit" value="Save" />
</form>
Run Code Online (Sandbox Code Playgroud)
这是我链接的模板中的相关代码:
<p><a href="/trainapp/add_sighting/?unit={{ unit.id }}">Add sighting</a></p>
Run Code Online (Sandbox Code Playgroud) 我想让我的用户更改他们的个人资料图片。上传照片时,我被重定向到成功页面,但照片没有上传到文件夹,关联字段为空。请注意,如果用户已经有照片,它会将字段重置为空白,因此在提交表单后,用户不再有照片。
我的猜测是 form.save(commit=False) 没有上传照片,也没有更新字段,但我不明白为什么!
这是模型、视图和表单:
轮廓模型:
class Profil(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
photo_profil=models.ImageField(null=True,blank=True,upload_to='img/profils', verbose_name="Photo de profil", help_text="La taille du fichier doit être inférieure à {0}Mo. Seules les extensions .png, .jpeg et .jpg sont acceptées.".format(str(int(MAX_UPLOAD_SIZE/1000000))))
cours_valides=models.CharField(blank=True,max_length=255,validators=[int_list_validator])
niveau_valides=models.CharField(blank=True,max_length=255,validators=[int_list_validator])
def __str__(self):
return "Profil de {0}".format(self.user.username)
Run Code Online (Sandbox Code Playgroud)
模型形式:
class PhotoForm(forms.ModelForm):
class Meta:
model=models.Profil
fields=('photo_profil',)
def clean_photo(self):
photo=self.cleaned_data.get('photo_profil')
if photo.size>settings.MAX_UPLOAD_SIZE:
raise forms.ValidationError(_("Le fichier envoyé depasse la limite de %sMo.".format(str(settings.MAX_UPLOAD_SIZE/1000000))))
return photo
Run Code Online (Sandbox Code Playgroud)
和观点:
@login_required()
def change_photo(request):
if request.method=="POST":
form=forms.PhotoForm(request.POST,request.FILES)
if form.is_valid():
profil=form.save(commit=False)
profil.user=request.user
profil.save()
return redirect('espace_personnel')
else:
form=forms.PhotoForm() …Run Code Online (Sandbox Code Playgroud) 我有一个独特的问题.我在我的floatField中输入"$ 90"值.我认为它应该被清理并存储为模型中的"90.0".
但是当我输入"$ 90"并调用clean_filed方法时,它不会调用那个干净的方法.但是当我在干净的(自我)方法上应用断点并尝试获得它的价值时,它说没有.
请帮帮我.这是我的代码.
Model
class Project(models.Model):
foo = models.FloatField("foo",
null=True, blank=True
)
forms
widgets = {
'foo': forms.TextInput(attrs={'currency': 'true'})}
def clean_foo(self):
value = self.cleaned_data.get('foo')
print value # i get NONE here.............
return value
Run Code Online (Sandbox Code Playgroud) 您好,我有一个问题,我已经制作了 modelformset_factory ,并且在选项中我选择了 can_delete = True ,现在我不知道如何将标记的对象删除为 'DELETE' : True 来从数据库中删除它们。我试图通过某些方式做到这一点,但没有成功。我也在 django formsetmodels 文档中寻找它,但这对我没有帮助。使用此选项 can_delete = True 我在 html 页面中获得了额外的复选框删除并标记他仅在打印时在控制台中打印我: {'username': 'sw', 'email': 'a@gmail.com', 'city' : 'ss', '代码': 12345, 'id': , '删除': False}
将表单保存到数据库可以正常工作,但我不知道如何从数据库中删除标记的表单。
我将非常感谢每一个帮助。
我已经从 models.py 中的模型制作了 modelformset_factory
class TestModel(models.Model):
username = models.CharField(max_length=120)
email = models.EmailField()
city = models.CharField(max_length=120)
code = models.IntegerField()
#W admin panelu za miast TestModel object bedzie username
def __str__(self):
return self.username
Run Code Online (Sandbox Code Playgroud)
然后我在views.py函数中添加了:
def django_modelformset(request):
TestModelFormset = modelformset_factory(TestModel, fields=['username', 'email', "city",
"code"], extra=1, can_delete=True)
formset = …Run Code Online (Sandbox Code Playgroud) django ×10
modelform ×10
django-forms ×3
dynamic ×1
field ×1
file-upload ×1
foreign-keys ×1
forms ×1
hidden-field ×1
python ×1
python-3.x ×1
upload ×1
validation ×1