标签: inline-formset

混淆了django foreignkey,manytomanyfield,inlineformset_factories

所有,

我遗漏了Django的ForeingKeys和ManyToManyFields底层模型的基本内容.

假设我正在构建一个关于汽车的应用程序.我可能有以下课程:

 class Car(models.Model):
   carName = models.CharField()

 class Manufacturer(models.Model):
   manufacturerName = models.CharField()

 class Wheel(models.Model):
   radius = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在这些类之间存在一些关系.汽车有制造商,有(四)轮胎.从概念上讲,虽然存在差异.制造商通过"聚合"相关; 制造商可以与多辆汽车相关联; 删除Car实例不应该导致该汽车的制造商被删除.车轮通过"组合"相关; 与汽车相关的每四个车轮都只与那辆汽车相关联; 删除汽车,也应删除车轮.

所以,直观地说,这意味着我应该做以下事情:

 class Car(models.Model):
   carName = models.CharField()
   manufacturer = models.ManyToManyField("Manufacturer")
   wheels = models.ForeignKey("Wheel")
Run Code Online (Sandbox Code Playgroud)

最终,我想使用inlineformset_factories,以便用户可以同时填写有关汽车,其制造商和车轮的详细信息.像这样的东西:

 class CarForm(ModelForm):
   class Meta:
     model = Car

 class ManufacturerForm(ModelForm):
   class Meta:
     model = Manufacturer

 class WheelForm(ModelForm):
   class Meta:
     model = Wheel

 Manufacturer_formset = inlineformset_factory(Car,Manufacturer,formset=ManufacturerForm)
 Wheel_formset = inlineformset_factory(Car,Wheel,formset=WheelForm)
Run Code Online (Sandbox Code Playgroud)

但是我发现的大多数文档都表明ForiegnKey应该从Wheel转向Car.这看起来倒退了,因为Wheel_formset会向用户显示Car("carName")而不是Wheel("radius")的所有字段.

只是输入这个问题的行为让我感到困惑.任何人都可以阐明如何构建一个包含所有汽车领域的形式,然后是所有制造商领域,然后是所有轮子领域.

谢谢

django many-to-many foreign-keys inline-formset

9
推荐指数
1
解决办法
5382
查看次数

OperationalError:使用unittest时没有这样的表:django_content_type

我正在尝试为我的django项目启动unittest,它返回错误:

ERROR: varys.users.tests.test_all_views (unittest.loader.ModuleImportFailure)
----------------------------------------------------------------------
ImportError: Failed to import test module: varys.users.tests.test_all_views
Traceback (most recent call last):
  File "/usr/lib/python2.7/unittest/loader.py", line 254, in _find_tests
    module = self._get_module_from_name(name)
  File "/usr/lib/python2.7/unittest/loader.py", line 232, in _get_module_from_name
    __import__(name)
  File "/home/antonscherbatov/projects/varys/locus-web-varys-d/varys/users/tests/__init__.py", line 1, in <module>
    from .test_all_views import *
  File "/home/antonscherbatov/projects/varys/locus-web-varys-d/varys/users/tests/test_all_views.py", line 12, in <module>
    from ...urls import urlpatterns
  File "/home/antonscherbatov/projects/varys/locus-web-varys-d/varys/urls.py", line 18, in <module>
    url(r'^survey/', include('varys.surveys.urls')),
  File "/home/antonscherbatov/projects/varys/ve/local/lib/python2.7/site-packages/django/conf/urls/__init__.py", line 26, in include
    urlconf_module = import_module(urlconf_module)
  File "/home/antonscherbatov/projects/varys/ve/local/lib/python2.7/site-packages/django/utils/importlib.py", line 40, in import_module
    __import__(name)
  File "/home/antonscherbatov/projects/varys/locus-web-varys-d/varys/surveys/urls.py", line …
Run Code Online (Sandbox Code Playgroud)

django proxy unit-testing inline-formset

9
推荐指数
1
解决办法
2030
查看次数

使用内联在前端启用Django管理功能

我决定将我的管理网站的一些功能移到前端.功能包括使用一些外键内联管理一个模型.

为此,我已经安装了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)

python django django-admin formset inline-formset

9
推荐指数
1
解决办法
707
查看次数

Django:Updateview inlineformset错误-(隐藏字段id)此字段是必需的

我正在尝试在 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 class django-views inline-formset

9
推荐指数
1
解决办法
5840
查看次数

没有实例的Django Formset

这个 Django Doc中,解释了如何创建一个允许您编辑属于特定作者的书籍的表单集.

我想要做的是:创建一个formset,允许您添加属于新作者的新书...在同一个formset中添加Book及其作者.

你可以点亮一盏灯吗?谢谢.

python forms django formset inline-formset

8
推荐指数
1
解决办法
4192
查看次数

Django内联表单集的初始数据

我已经整理了一个表格以保存食谱.它使用表单和内联formset.我的用户使用包含食谱的文本文件,他们希望剪切和粘贴数据以使条目更容易.我已经研究了如何在处理原始文本输入后填充表单部分,但我无法弄清楚如何填充内联表单集.

似乎解决方案几乎在这里拼写出来:http: //code.djangoproject.com/ticket/12213但我不能把这些碎片放在一起.

我的模特:

#models.py

from django.db import models

class Ingredient(models.Model):
    title = models.CharField(max_length=100, unique=True)

    class Meta:
        ordering = ['title']

    def __unicode__(self):
        return self.title

    def get_absolute_url(self):
        return self.id

class Recipe(models.Model):
    title = models.CharField(max_length=255)
    description = models.TextField(blank=True)
    directions = models.TextField()

    class Meta:
        ordering = ['title']

    def __unicode__(self):
        return self.id

    def get_absolute_url(self):
        return "/recipes/%s/" % self.id

class UnitOfMeasure(models.Model):
    title = models.CharField(max_length=10, unique=True)

    class Meta:
        ordering = ['title']

    def __unicode__(self):
        return self.title

    def get_absolute_url(self):
        return self.id

class RecipeIngredient(models.Model):
    quantity = …
Run Code Online (Sandbox Code Playgroud)

python forms django inline-formset

8
推荐指数
1
解决办法
1万
查看次数

如何根据当前对象字段值显示不同的内联

给定一个名为MainModela和a 的模型RelatedModel,其中后者有一个ForeignKey字段MainModel:

class MainModel(models.Model):
    name = models.CharField(max_length=50)
    type = models.BooleanField()

class RelatedModel1(models.Model):
    main = models.ForeingKey(MainModel):
    name = models.CharField(max_length=50)

class RelatedModel2(models.Model):
    main = models.ForeingKey(MainModel):
    name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

和相应的ModelAdmin类:

class RelatedModel1InlineAdmin(admin.TabularInline):
    model = RelatedModel1

class RelatedModel2InlineAdmin(admin.TabularInline):
    model = RelatedModel2

class MainModel(admin.ModelAdmin):
    inlines = [RelatedModel1, RelatedModel2]
Run Code Online (Sandbox Code Playgroud)

这是默认行为,你得到两个内联,每个相关模型一个.现在的问题是如何完全隐藏所有的内联的时候MainModel正在创建实例(ModelAdminadd_view),并显示了内联RelatedModel1type的现场MainModel实例True,并显示了内联RelatedModel2False.

我打算为属性创建一个描述符ModelAdmin.inline_instances,但我意识到我需要访问正在编辑的对象实例,但它作为参数传递.

有帮助吗?

谢谢!

django django-admin inline-formset

8
推荐指数
1
解决办法
3492
查看次数

Django内联外键与父主键不匹配

我需要一些帮助来使用内联表单来解决django错误.我似乎无法弄清楚这一点.如果我可以在尝试验证之前弄清楚如何做到这一点,我可能会强制插入eventID.

当我提交表单时,我收到一个错误: Hidden field (event): The inline foreign key did not match the parent instance primary key

有没有办法使这个代码工作?

以下代码应该让教师为一个活动注册多个学生.

------ models.py ------------

class Event(models.Model):
    title = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    time = models.DateTimeField()
    duration = models.DecimalField(max_digits=5, decimal_places=2)
    location = models.CharField(max_length=200)


# Customer is a parent, teacher, or school
class Customer(models.Model):
    event = models.ForeignKey(Event)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30) 
    address1 = models.CharField(max_length=60) 
    address2 = models.CharField(max_length=60, blank=True) 
    city = models.CharField(max_length=30) 
    state = models.CharField(max_length=2) 
    zipcode = models.CharField(max_length=5) 
    phone_number = models.CharField(max_length=30)
    email = …
Run Code Online (Sandbox Code Playgroud)

django django-forms inline-formset

8
推荐指数
1
解决办法
3358
查看次数

使用django-dynamic-formset和来自django-extra-views的CreateWithInlinesView - 多个表单集

我有3个型号:

class Client(models.Model):
     first_name = models.CharField(max_length=20)
     last_name = models.CharField(max_length=40)

class Phone(models.Model):
    number = models.CharField(max_length=10)
    client = models.ForeignKey(Client)

class ClientEmail(models.Model):
    client = models.ForeignKey(Client)
    address = models.EmailField(verbose_name='Email')
Run Code Online (Sandbox Code Playgroud)

一个表单和两个内联表单集:

class ClientForm(ModelForm):
    class Meta:
        model = Client


class PhoneFormSet(InlineFormSet):
    model = Phone
    extra = 1


class EmailFormSet(InlineFormSet):
    model = ClientEmail
    extra = 1
Run Code Online (Sandbox Code Playgroud)

视图:

class ClientCreateView(LoginRequiredMixin, CreateWithInlinesView):
    model = Client
    inlines = [PhoneFormSet, EmailFormSet,]
Run Code Online (Sandbox Code Playgroud)

和工作模板:

{% extends 'base.html' %}
{% block extra_head_script %}
<script src="{{ STATIC_URL }}js/jquery.formset.js"></script>
{% endblock %}

{% block content %} …
Run Code Online (Sandbox Code Playgroud)

python django jquery inline-formset django-class-based-views

8
推荐指数
1
解决办法
3044
查看次数

如何删除 Django 内联表单集中“额外”表单上的“删除”复选框

我在 Django 中使用内联表单集,并且对于每个显示一个“额外”表单的项目,用于添加另一个对象。

现有对象的表单具有“删除”复选框,用于删除该对象,这是有道理的。

但“额外”表单也有这些“删除”复选框......这没有任何意义,因为没有任何东西可以删除。Django 管理中的内联表单不会为“额外”表单显示这些“删除”复选框。

如何删除“额外”内联表单上的这些复选框?

我的模板的内联表单集部分是这样的(GitHub 上的简化完整版本):

{% for bookimage_form in form.forms %}
  {% for hidden_field in bookimage_form.hidden_fields %}
    {{ hidden_field.errors }}
  {% endfor %}

  {{ bookimage_form.as_table }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这是似乎多余的“删除”复选框:

示例截图

django inline-formset

7
推荐指数
1
解决办法
4648
查看次数