相关疑难解决方法(0)

django中Model.id和Model.pk有什么区别?

我看到django文件有时会同时使用?它们是一样的吗?有什么区别,参考在哪里?我只看到pk的文档.

顺便说一句,django参考是否覆盖了其类的所有方法?

python django django-models web

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

Django得到一个随机对象

我试图从模型A中获取一个随机对象

目前,它正在使用此代码:

random_idx = random.randint(0, A.objects.count() - 1)
random_object = A.objects.all()[random_idx]
Run Code Online (Sandbox Code Playgroud)

但我觉得这段代码更好:

random_object = A.objects.order_by('?')[0]
Run Code Online (Sandbox Code Playgroud)

哪一个是最好的?使用第一个代码删除对象可能出现问题?因为,例如,我可以有10个对象但是数字10作为id的对象不再存在?我在A.objects.all()[random_idx]中误解了什么吗?

python random django object

4
推荐指数
4
解决办法
3722
查看次数

Django模型表单和对象数据库id

我有一个复杂的django对象,它具有其他类类型的属性.这是这样的:

class Order:
   contractor - type Person
   some other fields....
Run Code Online (Sandbox Code Playgroud)

在我的表单中,我希望能够从下拉列表中选择现有的Person对象,或者添加一个带有表单的新对象.我已经设法创建表单和适当的工作流程,但问题是保存Order本身,我根本无法获取已保存的Person实例的id.我这样做:

def make_order(request):
  if request.method == 'POST':
    parameters = copy.copy(request.POST)
    contractor_form = ContractorForm(parameters)
    if contractor_form.is_valid():
      contractor_form.save()
      parameters['contractor'] = ???
    form = OrderForm(parameters)
    if form.is_valid():
      form.save() 
      return HttpResponseRedirect('/orders/')
  else:
    form = OrderForm()
    contractor_form = ContractorForm()

  return render_to_response('orders/make_order.html', {'order_form' : form, 'contractor_form' : contractor_form})
Run Code Online (Sandbox Code Playgroud)

因此,如果POST请求到达此方法,我首先检查ContractorForm是否已被填充 - 我假设如果表单有效,则表示要使用它.如果是,则保存,并希望将保存对象的数据库ID分配给适当的字段,以便OrderForm找到它.

我所有的表单都是ModelForms.

问题是:

  1. 有没有更好的方法来做到这一点?(从下拉菜单中选择或添加到位) - 更好或更多pythonic ;-)
  2. 使用ModelForms时如何获取保存的对象ID?

编辑

我的ContractorForm是:

class ContractorForm(ModelForm):
  class Meta:
    model = Contractor
Run Code Online (Sandbox Code Playgroud)

没有什么花哨.

django django-models django-forms

3
推荐指数
1
解决办法
7536
查看次数

标签 统计

django ×3

django-models ×2

python ×2

django-forms ×1

object ×1

random ×1

web ×1