我正在使用Django rest framework 2.3我有一个这样的类
class Quiz():
fields..
# A custom manager for result objects
class SavedOnceManager(models.Manager):
def filter(self, *args, **kwargs):
if not 'saved_once' in kwargs:
kwargs['saved_once'] = True
return super(SavedOnceManager, self).filter(*args, **kwargs)
class Result():
saved_once = models.NullBooleanField(default=False, db_index=True,
null=True)
quiz = models.ForeignKey(Quiz, related_name='result_set')
objects = SavedOnceManager()
Run Code Online (Sandbox Code Playgroud)
如您所见,我在结果上有自定义管理器,因此Result.objects.filter()只返回save_once设置为True的结果
现在我的Serializers看起来像这样:
class ResultSerializer(serializers.ModelSerializer):
fields...
class QuizSerializer(serializers.ModelSerializer):
results = ResultSerializer(many=True, required=False, source='result_set')
Run Code Online (Sandbox Code Playgroud)
现在,如果我序列化我的测验,它将只返回已saved_once设置的结果True.但对于特定用例,我希望序列化程序返回所有对象.我已经读过,我可以通过传递一个queryset参数http://www.django-rest-framework.org/api-guide/relations/(进一步注释部分)来做到这一点.但是,当我尝试这个
results = ResultSerializer(many=True, required=False, source='result_set',
queryset=
Result.objects.filter(
saved_once__in=[True, False]))
Run Code Online (Sandbox Code Playgroud)
我得到TypeError: …
我的模特:
class End_User(models.Model):
location = models.ForeignKey(Location)
first_name = models.CharField(max_length=70, blank=True, null=True)
email_address = models.CharField(max_length=70, blank=True, null=True)
class Phone_Client(models.Model):
end_user = models.ManyToManyField(End_User)
...
extensions = models.CharField(max_length=20)
class Line(models.Model):
phone_client = models.ManyToManyField(Phone_Client, through='Phone_Line' )
....
voicemail = models.BooleanField(default=False)
class Phone_Line(models.Model):
phone_client = models.ForeignKey(Phone_Client)
line = models.ForeignKey(Line)
line_index = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
所以基本上一个终端用户可以拥有多部手机,一部手机可以拥有多条线路,通过Phone_line相关.
我的页面需要编辑所有这些对象,并为同一页面中的Phone_Clients和Line all创建运行时的新实例.目前我正在为Phone_Client和Lines创建一个简单的End_User模型表单和modelformset_factory对象.由于手机可以有很多行,因此phone_formset中的每个手机表单都可以有一个行表单集对象.我目前正在做这样的事情
end_user = End_User.objects.get(pk=user_id)
user_form = End_UserForm(instance=end_user)
Phone_ClientFormSet = modelformset_factory(Phone_Client,form=PartialPhone_ClientForm, extra=0, can_delete=True)
phone_clients_formset = Phone_ClientFormSet(queryset=end_user.phone_client_set.all(), prefix='phone_client')
all_lines = modelformset_factory(Line, form=PartialLineForm, extra=0, can_delete=True)
phone_clients = end_user.phone_client_set.all()
client_lines_formsets = {}
for phone in …Run Code Online (Sandbox Code Playgroud) 我有一个网页,用户可以动态添加和删除表单到django formsets.
我已经阅读了使用Ajax动态地将表单添加到Django formset,基于此我可以动态地将表单添加到formset.现在我想动态删除formset.我在Django中查看了动态删除内联表单集
我想要这样做的方法是当用户点击删除时,我有一个ajax函数,它从数据库中删除表单实例记录.当我的ajax函数返回时,我保持相同的total_form_count和initial_form_count,只隐藏表单html,以便在我的POST中提交已删除的记录.
最初,formset将其表单元素呈现为:
#form0
<input id="id_formprefix-0-id" type ="hidden "value="something" name="formprefix-0-id">
<input id="id_formprefix-0-field" value="something" type="text" name="formprefix-0-field">
#form1
<input id="id_formprefix-1-id" type ="hidden "value="something" name="formprefix-1-id">
<input id="id_formprefix-1-field" value="something" type="text" name="formprefix-1-field">
#form2
<input id="id_formprefix-2-id" type ="hidden "value="something" name="formprefix-2-id">
<input id="id_formprefix-2-field" value="something" type="text" name="formprefix-2-field">
Run Code Online (Sandbox Code Playgroud)
现在假设我在删除记录后动态删除表单0,使用ajax,我不更改表单计数,因此total_form_count和initial_form_count为3.
(如果我在这种情况下将total_form_count和initial_form_count减少为2,当我在视图中使用POST数据填充formset时,它应该以form0和form1的形式排序.但在我的情况下,有效的表单是form1和form2)
现在在我看来,我做了类似以下的事情来保存我的表格.
myformset = modelformset_factory(ObjectElement,form=Object_Form, extra=0, can_delete=True)
for form in myformset.forms:
print(form.instance.id) #this does not print id of deleted record, but of the first existing record in the database.
print(form.instance.attribute)# this prints …Run Code Online (Sandbox Code Playgroud) 我有一个页面,我使用formsets显示不同的表单.
这些是我的模特:
class Phone(models.Model):
mac = models.CharField()
class PhoneLine(models.Model):
phone = models.ForeignKey(Phone)
voicemail = models.BooleanField("Voice Mail", default=False)
Run Code Online (Sandbox Code Playgroud)
手机可以有多条线路(电话线),但只有一条电话线可以启用语音信箱.
默认情况下,当我使用formset显示phonelines时,语音邮件字段显示为如下复选框.(我已根据要求在formset中添加了前缀)
form1 of the formset
<input type="checkbox" name="phone_client_line_1-0-voicemail" id="id_phone_client_line_1-0-voicemail">
form2 of the formset
<input type="checkbox" name="phone_client_line_1-1-voicemail" id="id_phone_client_line_1-1-voicemail">
Run Code Online (Sandbox Code Playgroud)
(选中和取消选中复选框会更新后端)
基于这个线程,Django - 在一个formset中将BooleanField显示为一组单选按钮,我修改了我的phoneline表单的init和add_prefix方法,现在将语音邮件字段显示为单选按钮.
class PhoneLineForm(ModelForm):
def __init__ (self, *args, **kwargs):
super(PhoneLineForm, self).__init__(*args, **kwargs)
self.fields['voicemail'] = BooleanField( widget = RadioSelect(choices=((self.prefix+"-"+str("voicemail"), 'Voicemail LIne'),)))
def add_prefix(self, field):
if field == 'voicemail': return ('%s_%s') %(field, self.instance.phone.id)
else: return self.prefix and ('%s-%s' % (self.prefix, field)) …Run Code Online (Sandbox Code Playgroud) 我有一个包含许多字段的模型,我正在为其创建两个部分表单
#model
class Line_Settings(models.Model):
....
line = models.ForeignKey(Line)
All = models.BooleanField(default=False)
Busy = models.BooleanField(default=False)
MOH = models.CharField(max_length=100, blank=True, null=True)
PLAR = models.CharField(max_length=100, blank=True, null=True)
....
def save(self, commit = True, *args, **kwargs):
....
#Partial model form1
class General(ModelForm):
class Meta:
model = Line_Settings
fields = ('MOH','PLAR')
#Partial model form2
class Common(ModelForm):
class Meta:
model = Line_Settings
fields = ('All','Busy')
Run Code Online (Sandbox Code Playgroud)
我已经覆盖了 Line_Settings 模型的保存以执行其他逻辑。
我需要能够将一些参数传递给覆盖的 save 方法以在我的逻辑中使用。
在我的视图中,我用 post 数据填充了两个部分表单,并且可以调用 save。
call_forwards = Common(request.POST, instance=line_settings)
general = General(request.POST, instance=line_settings)
Run Code Online (Sandbox Code Playgroud)
我需要像这样将参数传递给保存:
call_forwards.save(parameter="value")
general.save(parameter="value") …Run Code Online (Sandbox Code Playgroud) 我无法使用部署密钥将我的存储库克隆到远程EC2 ubuntu实例.以下是我遵循的步骤.
~/.ssh/know_hosts按照/sf/answers/1856447701/进行了清理这是输出 ssh -T git@bitbucket.org
You can use git or hg to connect to Bitbucket. Shell access is disabled.
This deploy key has read access to the following repositories:
username/repository: KEYNAME -- email@gmail.com
但是当我尝试克隆存储库时,
sudo git clone git@bitbucket.org:username/repository.git我收到以下错误
Cloning into 'repository'...
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
我在这里错过了什么吗?有人有什么建议吗?
谢谢阅读.
django ×5
django-forms ×4
amazon-ec2 ×1
bitbucket ×1
django-orm ×1
git ×1
python ×1
radio-button ×1
ssh ×1