欧盟可以使用此表单来选择他们为任何给定项目播放的角色(项目经理,开发人员等).我想将项目字段选项限制为仅限于员工部门的选项.现在,欧盟可以选择任何部门的项目(但不是部门,我完全排除了)我该怎么做?queryset = blabla不起作用..
楷模:
class Department(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Employee(models.Model):
fname = models.CharField(max_length=15)
department = models.ForeignKey(Department)
def __unicode__(self):
return self.fname
class Projecttype(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Project(models.Model):
projecttype = models.ForeignKey(Projecttype)
department = models.ForeignKey(Department)
members = models.ManyToManyField(Employee, through='Membership')
def __unicode__(self):
return "%s > %s" % (self.department, self.projecttype)
class Role(models.Model):
name = models.CharField(max_length=20)
def __unicode__(self):
return self.name
class Membership(models.Model):
project = models.ForeignKey(Project, null=True)
department = models.ForeignKey(Department)
employee = models.ForeignKey(Employee)
role = models.ManyToManyField(Role, blank=True, …Run Code Online (Sandbox Code Playgroud) 我正在使用django-extra-views,我想用预先填充的数据填充表单及其相关的内联,然后保存(创建对象).到目前为止,我有:
from extra_views import CreateWithInlinesView
class ItemCreateView(extra_views.CreateWithInlinesView):
def dispatch(self, request, item_pk, *args, **kwargs):
self.item = models.Item.objects.get(id=item_pk)
return super(ItemCreateView, self).dispatch(
request, *args, **kwargs
)
def get_initial(self):
# Thanks to that method a form is populated with initial data.
return forms.ItemCreateForm(instance=self.item).initial
def construct_inlines(self):
# Thanks to that method a form and its inlines are prepopulated successfully.
ItemFormSet = inlineformset_factory(models.Item, models.ItemEntry, extra=0)
formset = ItemFormSet(instance=self.item)
return [formset]
Run Code Online (Sandbox Code Playgroud)
但是,尽管内联值是通过POST发送的,但是保存对象时没有内联.我究竟做错了什么?我应该初始化表单并以不同的方式内联吗?
我有这样的问题:我想限制内联模型管理中的外键选择,但我想根据此内联对象中指定的一些值来执行此操作。
如何在 InlineModelAdmin 方法(特别是在formfield_for_foreignkey(self, db_field, request, **kwargs))中访问内联对象(不是父对象)?
我想在预购模型和产品模型之间创建内联表单集。场景是,当用户决定创建预购时,他将能够选择一种或多种产品。另一方面,一种产品可能会出现在一个或多个预购订单中。考虑到这一点,我创建了多对多关系。
模型.py
class Preorder(models.Model):
client = models.ForeignKey(Client,verbose_name=u'Client')
invoice_date = models.DateField("Invoice date",null=True, blank=True, default=datetime.date.today)
preorder_has_products = models.ManyToManyField(Product, blank=True)
def get_absolute_url(self):
return reverse('preorder_edit', kwargs={'pk': self.pk})
class Product(models.Model):
name = models.CharField("Name",max_length=200)
price = models.DecimalField("Price", max_digits=7, decimal_places=2, default=0)
barcode = models.CharField(max_length=16, blank=True, default="")
eopyy = models.CharField("Code eoppy",max_length=10, blank=True, default="")
fpa = models.ForeignKey(FPA, null=True, blank=True, verbose_name=u'Fpa Scale')
Run Code Online (Sandbox Code Playgroud)
表格.py
class PreorderForm(ModelForm):
class Meta:
model = Preorder
exclude = ('client','preorder_has_products',)
def __init__(self, *args, **kwargs):
super(PreorderForm, self).__init__(*args,**kwargs)
self.fields['invoice_date'].widget = MyDateInput(attrs={'class':'date'})
class ProductForm(ModelForm):
#name = ModelChoiceField(required=True,queryset=Product.objects.all(),widget=autocomplete.ModelSelect2(url='name-autocomplete')) …Run Code Online (Sandbox Code Playgroud) 由于django中出色的内联模型表单集,我有一个非常先进的表单,有4个内联表单集.在模板中,我在选项卡中显示每个formset.如果该选项卡中的formset完全有任何验证错误,那么一切都非常灵活,但是我想将选项卡颜色设置为红色.所以我尝试了这个:
<div id="tabs">
<ul>
<li><a href="#foo-tab"{% if forms.FooFormSet.errors %} class="error"{% endif %}>Foo</a></li>
<li><a href="#bar-tab"{% if forms.BarFormSet.errors %} class="error"{% endif %}>Bar</a></li>
<li><a href="#zoo-tab"{% if forms.ZooFormSet.errors %} class="error"{% endif %}>Zoo</a></li>
<li><a href="#doo-tab"{% if forms.DooFormSet.errors %} class="error"{% endif %}>Doo</a></li>
</ul>
<div id="foo-tab"></div>
<div id="bar-tab"></div>
<div id="zoo-tab"></div>
<div id="doo-tab"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
但它不起作用,因为表单.*Set.errors是一个带有空字典的列表(所以它总是会返回True),如[{},{},{}](表单集中的表单数量是相同的空formset.errors中的字典
我认为一个解决方案可能是继承BaseInlineFormSet并添加一个has_errors方法或其他东西,然后对我的所有formset使用该子类化基础.还有其他建议吗?谢谢!
出于某种原因,我提交后,我的formset将无法验证.关于这种方式的任何想法都可能发生?
class Department(models.Model):
department = models.CharField(verbose_name = "Department Name", max_length=100)
description = models.TextField(verbose_name = "Description", blank=True, null=True)
sp_description = models.TextField(verbose_name = "Description (Spanish)", blank=True, null=True)
phone = PhoneNumberField()
phone_ext = models.CharField(max_length=10, blank=True)
#Relations
provider = models.ForeignKey(Provider, blank=True, null=True)
services_offered = models.ManyToManyField(ServiceType)
def __unicode__(self):
return self.department
Run Code Online (Sandbox Code Playgroud)
def display_step5(request):
msg = ''
email = request.session.get('email')
provider_obj = retrieve_provider_instance(email)
AddDepartmentFormSet = inlineformset_factory(Provider, Department, extra=0)
if is_authenticated(request):
AddDepartmentFormSet = inlineformset_factory(Provider, Department, extra=0)
if request.method=='POST':
if 'add_department' in request.POST:
cp = request.POST.copy()
cp['department-TOTAL_FORMS'] …Run Code Online (Sandbox Code Playgroud) 我有两个看起来像这样的模型:
class RouteBase(models.Model):
base = models.ForeignKey("Base")
route = models.ForeignKey("Route")
sequence = models.IntegerField()
class Route(models.Model):
bases = models.ManyToManyField("Base", through="RouteBase", blank=True)
description = models.TextField(blank=True)
#and a few other attributes omitted for brevity
Run Code Online (Sandbox Code Playgroud)
...然后是一个看起来像这样的模型:
class RouteBaseForm(ModelForm):
base = forms.ModelChoiceField(queryset=Base.objects.all(), widget=forms.TextInput)
sequence = forms.IntegerField(widget=forms.HiddenInput)
class Meta:
model = RouteBase
Run Code Online (Sandbox Code Playgroud)
如您所见,序列窗口小部件是隐藏的,因为我希望这个字段由django自动处理.我希望用户只需通过文本框输入Base.序列由文本框的顺序推断.
我创建了一个带有此表单的formset,用于创建/编辑路径中的所有基础:
RouteBaseFormset = inlineformset_factory(Route, RouteBase, form=RouteBaseForm, extra=5, )
Run Code Online (Sandbox Code Playgroud)
创建此formset时,序列字段为空.在保存formset之前我需要用值填充它(否则它将不会验证).我可以想到四种方法
i=1
for form in formset.forms:
form.fields["sequence"].initial = i
i += 1
除了一个问题,这很好.当formset被提交回视图以进行保存时,使用formset创建的所有 5个额外字段都将填入序列值.当用户只想向路线添加2或3个碱基时,这会导致问题.弹出验证错误,因为该表单的必填字段"base"为空.我可以在formset被POST之后运行一些代码,检查是否存在一个base,如果没有,删除序列,但如果我要这样做,我也可以......
当formset为POST时运行一些代码,检查是否已输入Base,如果是,则添加序列,如果没有,则将该字段留空.这样,当您尝试.save()使用formset时,空值确保该特定表单不会放入数据库中.唯一的问题是我不能对表单做任何事情,直到我运行.save(commit=False)我不能做,因为formset不验证.但我可以......
通过复制request.POST变量并手动设置序列来添加序列值,但这看起来非常糟糕. …
我不确定标题是否能准确描述我想要的内容.我想要的是实现类似的东西:Django添加/删除表单而无需多次提交.
但我没有列出我有表格和表格的项目.此formset的形式包含我可用于创建类似{%url'item_edit'item.id%}的链接的信息.问题是它是隐藏字段的值.在这里(http://docs.djangoproject.com/en/dev/topics/forms/#looping-over-the-form-s-fields)您有一个选项列表,如何在模板中使用表单的字段,但它们都不是{{field.value}}.如果我尝试过,那么它就会默默地失败.
无论如何.到代码.我在模板中有的是:
<form enctype="multipart/form-data" method="post" action="/list/edit/{{ list.id }}/">
<table>
{{ form.as_table }}
{{ formset.management_form }}
{% for form in formset.forms %}
{% if forloop.first %}
<tr>
{% for field in form.visible_fields %}
<td>{{ field.label }}</td>
{% endfor %}
</tr>
{% endif %}
<tr>
{% for field in form.visible_fields %}
{% if not forloop.last %}
<td>{{ field }}</td>
{% else %}
<td>{{ field }}
{% endif %}
{% endfor %}
{% for field in form.hidden_fields %} …Run Code Online (Sandbox Code Playgroud) 我有一个列表模型和一个照片模型:
class Listing(models.Model):
title = models.CharField(max_length=255)
<more fields>...
class Photo(models.Model):
image = models.ImageField(upload_to=create_file_path)
listing = models.ForeignKey(Listing, related_name='photos')
Run Code Online (Sandbox Code Playgroud)
我正在使用 CBV、UpdateView 来编辑列表。我正在使用这个表格:
class ListingDetailForm(forms.ModelForm):
class Meta:
model = Listing
exclude = []
Run Code Online (Sandbox Code Playgroud)
以及 forms.py 中的内联表单集,可以删除/更改图像:
PhotoFormset = inlineformset_factory(Listing, Photo, fields='__all__', extra=1)
Run Code Online (Sandbox Code Playgroud)
这是我的观点:
PhotoFormset = inlineformset_factory(Listing, Photo, fields='__all__', extra=1)
Run Code Online (Sandbox Code Playgroud)
以及相关的模板部分:
{% block body %}
<form action="" method="post">
{% csrf_token %}
{% for field in form %}
{{ field.errors }}
{{ field.label_tag }} {{ field }}<br><br>
{% endfor %}
{% for field in photo_form …Run Code Online (Sandbox Code Playgroud) 我的django管理员遇到了一些重大的性能问题.根据我有多少内联,有很多重复的查询.
models.py
class Setting(models.Model):
name = models.CharField(max_length=50, unique=True)
class Meta:
ordering = ('name',)
def __str__(self):
return self.name
class DisplayedGroup(models.Model):
name = models.CharField(max_length=30, unique=True)
position = models.PositiveSmallIntegerField(default=100)
class Meta:
ordering = ('priority',)
def __str__(self):
return self.name
class Machine(models.Model):
name = models.CharField(max_length=20, unique=True)
settings = models.ManyToManyField(
Setting, through='Arrangement', blank=True
)
class Meta:
ordering = ('name',)
def __str__(self):
return self.name
class Arrangement(models.Model):
machine = models.ForeignKey(Machine, on_delete=models.CASCADE)
setting = models.ForeignKey(Setting, on_delete=models.CASCADE)
displayed_group = models.ForeignKey(
DisplayedGroup, on_delete=models.PROTECT,
default=1)
priority = models.PositiveSmallIntegerField(
default=100,
help_text='Smallest number will …Run Code Online (Sandbox Code Playgroud) django ×10
inline-formset ×10
django-forms ×3
forms ×2
formset ×2
django-admin ×1
duplicates ×1
image ×1
inline ×1
model ×1
python ×1
validation ×1
view ×1