说我的我有以下内容models.py:
class Company(models.Model):
name = ...
class Rate(models.Model):
company = models.ForeignKey(Company)
name = ...
class Client(models.Model):
name = ...
company = models.ForeignKey(Company)
base_rate = models.ForeignKey(Rate)
Run Code Online (Sandbox Code Playgroud)
即有多个Companies,每个都有Rates和Clients.每个都Client应该有一个Rate从它的父级Company's Rates而不是另一个基础中选择的基础Company's Rates.
在创建用于添加a的表单时Client,我想删除Company选项(因为已经通过Company页面上的"添加客户端"按钮Rate选择了该选项)并且还将选择限制为该选项Company.
我如何在Django 1.0中解决这个问题?
我目前的forms.py文件只是样板文件:
from models import *
from django.forms import ModelForm
class ClientForm(ModelForm):
class Meta:
model = Client
Run Code Online (Sandbox Code Playgroud)
这views.py也是基本的:
from django.shortcuts …Run Code Online (Sandbox Code Playgroud) 我的模型与以下内容不同:
class Bike(models.Model):
made_at = models.ForeignKey(Factory)
added_on = models.DateField(auto_add_now=True)
Run Code Online (Sandbox Code Playgroud)
所有用户都可以在多家工厂工作,因此,他们的用户配置文件都有一个ManyToManyField到Factory.
现在我想构建一个ModelFormfor,Bike但我希望made_at列表只包含当前用户工作的工厂.这个想法是,用户应该能够添加他们组装好的自行车并进入自行车所在的工厂.
我怎么做?
我有一个看起来像这样的模型:
class Invite(models.Model):
user = models.ForeignKey(User)
event = models.ForeignKey(Event)
roles = models.ManyToManyField(Role, blank=True, null=True)
sent = models.BooleanField("Invite Sent", default=False, editable=False)
created = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return u"%s" % self.user
class Meta:
unique_together =(('user','event'),)
class Role(models.Model):
"""
This associates a user's role to an event
"""
event = models.ForeignKey(Event, related_name="roles")
roletype = models.ForeignKey(RoleType)
profiles = models.ManyToManyField(Profile, related_name="roles",
blank=True, null=True)
modified = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
因此,无论何时创建新事件,都会创建一堆角色.在Invite模型中,我如何只显示与我在Django Admin中的更改表单中选择的事件相关联的角色,而不是显示Role模型中的所有条目?
假设我将这些模型作为一个简单的例子:
class Event(models.Model):
name = models.CharField(max_length=50, default='')
app = models.ForeignKey(App)
class App(models.Model):
name = models.CharField(max_length=50, default='')
app_config = models.ForeignKey(AppConfig)
class AppConfig(models.Model):
type = models.CharField(max_length=50, default='')
is_valid = models.BooleanField(default=True)
Run Code Online (Sandbox Code Playgroud)
我想创建一个带有添加/更改表单的管理页面,Event这样我就可以选择App并创建AppConfig所有字段.
基本上,要有一个带有下拉列表的表单来选择App一个表单以及一个表单来填充AppConfig字段.或者甚至只是一个"+"符号或一个链接,它会弹出一个表单来创建一个AppConfig.
我看到了很多关于如何将其添加到list_display(例如this)中的示例,但是无法设法执行相同操作fields或者fieldsets为了将其添加到添加/更改表单中.
任何建议将不胜感激.谢谢!
注意:我知道如果我还有AppConfig一个外键,这可能很容易解决,Event但这并没有多大意义.
编辑:我的Django和Python版本:
Python:2.7.x
Django:1.7.4
Edit2:我发现这个很好的开源代码django_reverse_admin可能会有所帮助,但首先,这个特定的软件包只支持Django 2.0+.我试图使用原来的代码,似乎支持以前的Django版本,但没有设法将其应用于我的具体情况.
如果有人有想法或者可以告诉我如何在我的特定情况下使用它,这将是伟大的.谢谢!
django-smart-choices是一个优雅的解决方案,使Django开发人员能够在其表单中链接选择输入.但正如开发人员在其问题列表中所报告的那样,在表单集中使用它时效果不佳.
它呈现的javascript与模型定义中右侧的"链式字段"的id相关联.
在formset中使用时,您认为如何使其工作?我认为窗口小部件的渲染方法(请参阅django-smart-choices代码)需要以某种方式了解formset(理想情况下,形成前缀).但是怎么样?
django ×5
django-forms ×3
django-admin ×2
python ×2
ajax ×1
javascript ×1
jquery ×1
modelform ×1