如何为ModelForm中的字段分配初始值?例如:
class Form1(forms.Form):
title=forms.CharField(initial="hello")
Run Code Online (Sandbox Code Playgroud)
使用modelForm的等价物的基本语法是这样的:
class Form2(djangoforms.ModelForm):
class Meta:
model=SomeModel
fields=('title',)
Run Code Online (Sandbox Code Playgroud)
我想要做的是生成一个CRUD.由于我在一个appengine项目中这样做,我不能使用通用视图.Appengine为我们提供了djangoforms.ModelForm与django一样的工作,ModelForm但使用了appengine的数据存储.
我需要以上功能来执行"编辑"部分.
我想做这样的事情:
class Task(models.Model):
...
created_by = models.ForeignKey(User, **default=[LoggedInUser]** blank=True, null=True, related_name='created_by')
Run Code Online (Sandbox Code Playgroud)
这可能吗?除了在视图中执行request.user之外,我无法找到获取登录用户的正确方法,这在此处似乎不起作用.
PS_我意识到我可以通过其他方式初始化Model数据,但我认为这是最干净的方法.
好的,我现在已经抓取了谷歌和Django文档超过2个小时(以及freenode上的IRC频道),并且无法解决这个问题.
基本上,我有一个名为的模型Room,如下所示:
class Room(models.Model):
"""
A `Partyline` room. Rooms on the `Partyline`s are like mini-chatrooms. Each
room has a variable amount of `Caller`s, and usually a moderator of some
sort. Each `Partyline` has many rooms, and it is common for `Caller`s to
join multiple rooms over the duration of their call.
"""
LIVE = 0
PRIVATE = 1
ONE_ON_ONE = 2
UNCENSORED = 3
BULLETIN_BOARD = 4
CHILL = 5
PHONE_BOOTH = 6
TYPE_CHOICES = (
('LR', 'Live …Run Code Online (Sandbox Code Playgroud) 给定一种形式,我想在呈现字段之前更改其值。这是我正在尝试的:
class RequiredFormSet(BaseFormSet):
def add_form(self):
tfc = self.total_form_count()
self.forms.append(self._construct_form(tfc))
if self.is_bound:
data = self.management_form.data.copy() # make data mutable
data[TOTAL_FORM_COUNT] = self.management_form.cleaned_data[TOTAL_FORM_COUNT] + 1
self.management_form.data = data
else:
self.extra += 1
Run Code Online (Sandbox Code Playgroud)
我以为所有内容都存储在中data,但是我想那data已经传递到各个字段(或小部件)了吗?那我需要精确修改什么属性?
我正在尝试使用表单中的干净方法来清理数据,但是当我这样做时,我不会在我的表单中看到验证错误,它是来自django的唯一错误页面.
我有编辑和创建表单,我想在一个地方清洁,但不能复制到2个视图.
你能给我一些建议吗?我阅读了关于表格中干净和有效的文档,但我仍然存在问题.我举一个例子:
Views.py
@user_passes_test(lambda u: u.is_staff, login_url='/account/login/')
def client_create(request):
dict = {}
if request.method == 'POST':
form_user = ClientUserCreateForm(request.POST, prefix="user")
form_client = ClientForm(request.POST, prefix="client")
if form_user.is_valid() and form_client.is_valid():
obj_user = form_user.save(commit=False)
obj_client = form_client.save(commit=False)
obj_user.username = form_client.cleaned_data['vat']
obj_user.set_password(form_client.cleaned_data['vat'])
obj_user.is_active = 1
obj_user.save()
obj_client.id_id = obj_user.id
obj_client.save()
# Redirect to Client profile
return HttpResponseRedirect(reverse('client_profile', args={obj_client.id_id}))
# If forms have error show view again with errors
dict['form_user'] = form_user
dict['form_client'] = form_client
return render(request, 'panel/client/form.html', dict)
else:
dict['form_user'] = ClientUserCreateForm(prefix="user")
dict['form_client'] …Run Code Online (Sandbox Code Playgroud) 下面的 Django 表单可以工作,但对于我来说,我无法弄清楚如何将 ModelChoiceField 设为operator空白或设置None为默认值。我希望用户可以选择将此选择字段设置为None。这会自动填充用户列表中的第一个用户。
模型
class Build(models.Model):
PSScustomer = models.ForeignKey(Customer, on_delete=models.CASCADE)
author = models.ForeignKey(get_user_model(),related_name='+',on_delete=models.CASCADE,blank=True, null= True,)
plannedAuthor = models.ForeignKey(CustomUser,related_name='+',blank=True, null= True, on_delete=models.CASCADE)
status = models.CharField(max_length=100,blank=True,)
operator = models.ForeignKey(CustomUser,related_name='+',blank=True, null= True, on_delete=models.CASCADE, default=None)
Run Code Online (Sandbox Code Playgroud)
看法
class queuedBuild_CreateView(LoginRequiredMixin,CreateView):
model = Build
form_class = queuedBuild_Creation_Form
template_name = 'addQueuedBuild.html'
login_url = 'login'
success_url = reverse_lazy('equipmentdashboard')
def get_form(self, form_class=None):
form = super().get_form(form_class)
customer = self.request.user.PSScustomer
form.fields['operator'].choices = [(item.id, item.first_name) for item in CustomUser.objects.filter(isDevice=False, PSScustomer = customer)]
return form
Run Code Online (Sandbox Code Playgroud)
形式 …