所有,
我遗漏了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项目启动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-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 Doc中,解释了如何创建一个允许您编辑属于特定作者的书籍的表单集.
我想要做的是:创建一个formset,允许您添加属于新作者的新书...在同一个formset中添加Book及其作者.
你可以点亮一盏灯吗?谢谢.
我已经整理了一个表格以保存食谱.它使用表单和内联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) 给定一个名为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正在创建实例(ModelAdmin的add_view),并显示了内联RelatedModel1时type的现场MainModel实例True,并显示了内联RelatedModel2时False.
我打算为属性创建一个描述符ModelAdmin.inline_instances,但我意识到我需要访问正在编辑的对象实例,但它作为参数传递.
有帮助吗?
谢谢!
我需要一些帮助来使用内联表单来解决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) 我有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
我在 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 ×10
inline-formset ×10
python ×4
django-admin ×2
forms ×2
formset ×2
class ×1
django-forms ×1
django-views ×1
foreign-keys ×1
jquery ×1
many-to-many ×1
proxy ×1
unit-testing ×1