我有以下型号:
class Bill(models.Model):
date = models.DateTimeField(_("Date of bill"),null=True,blank=True)
class Item(models.Model):
name = models.CharField(_("Name"),max_length=100)
price = models.FloatField(_("Price"))
quantity = models.IntegerField(_("Quantity"))
bill = models.ForeignKey("Bill",verbose_name=_("Bill"),
related_name="billitem")
Run Code Online (Sandbox Code Playgroud)
我知道这是可能的:
from django.forms.models import inlineformset_factory
inlineformset_factory(Bill, Item)
Run Code Online (Sandbox Code Playgroud)
然后通过标准视图处理.
现在我想知道,如果有一种方法可以实现相同的(意思是:使用内联来添加/编辑属于账单的项目)使用基于类的视图(而不是管理界面).
[我已经在Django用户发布了这个| Google网上论坛也是.]
使用内联formset文档中的示例,我能够编辑属于特定模型的对象(使用模型形式).我一直在尝试使用相同的模式来 创建使用内联表单集的新对象,但是无法清除我的脑袋以便为此目的带出一个工作视图.
使用与上述链接相同的示例,我将如何创建"作者"模型的新实例及其相关的"书籍"对象?
你如何限制django admin中的内联formset?问题:我有一张表A与B有1到n的关系.表A应该至少有一个表B项和最多5个表B项.
谢谢
我正在尝试采用一种使用 Django-Crispy-Forms 布局功能保存带有主表单的嵌套表单集的方法,但我无法保存它。我正在关注此代码示例项目,但无法验证表单集以保存数据。如果有人能指出我的错误,我将非常感激。我还需要在同一视图中为 EmployeeForm 添加三个内联。我尝试了 Django-Extra-Views,但无法实现。如果您建议为大约 5 左右的相同视图添加多个内联,我将不胜感激。我只想实现一个用于创建的页面Employee及其内联,例如Education, Experience, Others. 下面是代码:
楷模:
class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='employees',
null=True, blank=True)
about = models.TextField()
street = models.CharField(max_length=200)
city = models.CharField(max_length=200)
country = models.CharField(max_length=200)
cell_phone = models.PositiveIntegerField()
landline = models.PositiveIntegerField()
def __str__(self):
return '{} {}'.format(self.id, self.user)
def get_absolute_url(self):
return reverse('bars:create', kwargs={'pk':self.pk})
class Education(models.Model):
employee = models.ForeignKey('Employee', on_delete=models.CASCADE, related_name='education')
course_title = models.CharField(max_length=100, null=True, blank=True)
institute_name = models.CharField(max_length=200, null=True, blank=True)
start_year = models.DateTimeField(null=True, blank=True)
end_year = models.DateTimeField(null=True, …Run Code Online (Sandbox Code Playgroud) 我是Django的新手,我想我在文档中遗漏了这个.
问题是在inline-formset中我没有声明一个表单,只需传递两个模型来构造它.
我想知道如何使用内联formset更改单个字段的窗口小部件?
在django文档中,有一个使用inlineformset_factory来编辑已创建对象的示例
https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#using-an-inline-formset-in-a-view
我改变了这个例子:
def manage_books(request):
author = Author()
BookInlineFormSet = inlineformset_factory(Author, Book, fields=('title',))
if request.method == "POST":
formset = BookInlineFormSet(request.POST, request.FILES, instance=author)
if formset.is_valid():
formset.save()
return HttpResponseRedirect(author.get_absolute_url())
else:
formset = BookInlineFormSet(instance=author)
return render_to_response("manage_books.html", {
"formset": formset,
})
Run Code Online (Sandbox Code Playgroud)
使用上面的内容,它只渲染没有父模型的内联模型.
使用inlineformset_factory创建一个新对象,比如作者,与多个图书相关联,这是什么方法?
使用django docs上面的Author Book模型的示例将很有帮助.Django文档仅供例如如何编辑使用inlineformset_factory已经创建的对象,而不是创造新的
在Django中,表单可能很复杂。表单集可以使您想退出Django。我在那个时候。
有哪些不同的用例,以及要使用哪些用例的注意事项?
我正在寻找有关何时使用每个工厂的更好的指导,因为它们似乎取决于您何时知道什么类型的表单,字段以及是否要创建,编辑或删除(单个表单完全或单独)。父模型)。我已经阅读了许多演练,但是正在努力查看大图,尤其是当我尝试从基于函数的视图转换为基于类的视图时。
以下是一些带有假设/限制的伪代码,可帮助您帮助我理解不同之处。提供伪代码可能会有所帮助,例如哪种类型的表单(ModelForm或常规)与Formset一起使用,或者应该pop从表单中获取什么,因为这似乎是创建具有关系的表单的趋势。
假设您有一些模型:
class Dish(models.Model):
name = models.CharField(max_length=50)
class Meal(models.Model):
name = models.CharField(max_length=50)
dishes = models.ManyToManyField(Dish,
# through='OPTIIONALMealDishIntermediaryClassTable',
related_name="meal")
class Reservation(models.Model):
date = models.DateTimeField()
greeting = models.CharField(max_length=255)
meal = models.OneToOneField(Meal, on_delete=models.CASCADE)
class MealPhotos(models.Model):
photo = models.OneToOneField(Photo, on_delete=models.CASCADE, related_name='mealPhoto')
meal = models.ForeignKey(Meal, on_delete=models.CASCADE)
# optional, so a photo can be attached to a dish if the picture is just of the dish
dish = models.ForeignKey(Dish, blank=True, null=True, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
您想创建一个new Meal,同时要发送一个Reservation:
ModelForms?(这意味着你将如何手柄assignming了 …我需要创建一个内联formset
a)排除某些字段MyModel完全显示
b)显示一些字段MyModel但阻止它们可编辑.
我尝试使用下面的代码,使用values()以便将查询集过滤到我想要返回的那些值.但是,这失败了.
任何有想法的人?
class PointTransactionFormset(BaseInlineFormSet):
def get_queryset(self):
qs = super(PointTransactionFormset, self).get_queryset()
qs = qs.filter(description="promotion feedback")
qs = qs.values('description','points_type') # this does not work
return qs
class PointTransactionInline(admin.TabularInline):
model = PointTransaction
#formset = points_formset()
#formset = inlineformset_factory(UserProfile,PointTransaction)
formset = PointTransactionFormset
Run Code Online (Sandbox Code Playgroud) 我决定将我的管理网站的一些功能移到前端.功能包括使用一些外键内联管理一个模型.
为此,我已经安装了django-dynamic-formset JQuery插件(链接git)并且已经挣扎了几天.这是其中一个问题.
Django管理员已经实现了相同的功能.我可以根据需要添加,修改,删除内联和修改模型实例.我想知道为什么我应该使用这个JQuery插件,为什么在互联网上没有这么多关于这个主题的好教程?
我需要一个很好的最近的例子,说明如何在没有第三方JS文件的情况下在前端使用django formsets或inline formsets.如果它有链接(不是复选框)来删除内联项并添加将正确添加新内联的按钮,我会很高兴.
更具体一点,因为这个问题被认为过于宽泛:
我有两个模型School和SchoolPlace:
class School(models.Model):
name = models.CharField(_('School name'), max_length=100)
class SchoolPlace(models.Model):
school = models.ForeignKey(School, verbose_name=_('school place'), related_name='school_places', blank=True, null=True)
name = models.CharField(_('School place name'), max_length=200)
city = models.ForeignKey(City, blank=True, null=True, verbose_name=_('city'),
help_text='city')
Run Code Online (Sandbox Code Playgroud)
还有相应的形式:
class SchoolForm(forms.ModelForm):
name = forms.CharField(
label=_('Name'),
widget=forms.TextInput(attrs={
'placeholder': _('school name')}),
max_length=100, required=True)
class SchoolPlaceForm(forms.ModelForm):
name = forms.CharField(label=_('Name'),
widget=forms.TextInput(
attrs={'placeholder': _('school place name')}),
max_length=200,
required=False)
city = forms.ModelChoiceField(label=_('City'),
widget=forms.Select(attrs={'class': 'ui search dropdown'}),
queryset=City.objects.all(), required=False)
class Meta:
model …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 django 中编辑具有内联表单集的更新视图。下面是 model.py、forms.py、views.py 和模板文件。表单没有保存,所以我在views.py的post方法中放置了一个print(actor_form)来看看发生了什么。我得到以下 html 代码:
<input type="hidden" name="actor-TOTAL_FORMS" value="1" id="id_actor-TOTAL_FORMS" /><input type="hidden" name="actor-INITIAL_FORMS" value="1" id="id_actor-INITIAL_FORMS" /><input type="hidden" name="actor-MIN_NUM_FORMS" value="0" id="id_actor-MIN_NUM_FORMS" /><input type="hidden" name="actor-MAX_NUM_FORMS" value="1000" id="id_actor-MAX_NUM_FORMS" />
<tr><td colspan="2"><ul class="errorlist nonfield"><li>(Hidden field id) This field is required.</li></ul></td></tr>
<tr><th><label for="id_actor-0-actorName">ActorName:</label></th><td><input type="text" name="actor-0-actorName" value="www" maxlength="50" id="id_actor-0-actorName" /></td></tr>
<tr><th><label for="id_actor-0-DELETE">Delete:</label></th><td><label for="id_actor-0-DELETE" class="checkbox-inline"><input type="checkbox" name="actor-0-DELETE" id="id_actor-0-DELETE" />
</label><input type="hidden" name="actor-0-id" id="id_actor-0-id" /><input type="hidden" name="actor-0-useCase" id="id_actor-0-useCase" /></td></tr>
Run Code Online (Sandbox Code Playgroud)
在上面的第二行中,您可以看到 - (隐藏字段 id) 该字段是必填字段。
我相信这是导致内联无法保存的原因,但我不知道如何修复它。
这是 models.py
class Profile(models.Model):
profileName = models.CharField(max_length=50)
profileBoundary = models.CharField(max_length=3, choices …Run Code Online (Sandbox Code Playgroud) django ×10
inline-formset ×10
django-admin ×3
django-forms ×2
formset ×2
python ×2
class ×1
django-views ×1
forms ×1
jquery ×1
modelform ×1