从BaseObject获取ChildObject

时间:2017-09-21 09:00:15

标签: jquery python ajax django

所以我想得到Secondobject

首先是一对一。

model.py(初)

class Firstobject(models.Model):
(...)       
def save(self,*args,**kwargs):
   super().save(*args,**kwargs)
   Second.objects.get_or_create(first=self)

model.py(第二)

class Votes(models.Model):
(...)
first = models.OneToOneField(First)     
def save(self,*args,**kwargs):
   self.value2 = self.value - self.value2
   super().save(*args,**kwargs)      
   def __str__(self):
      return "%s name" % self.first 

View.py

def function(request, pk):
pk = request.GET.get('pk')
obj = models.First.objects.get(pk=pk)
votes = obj.Second
votes.value = votes.value + 1 
votes.save()
data = {'val1':votes.value, 'val2':votes.value2}
return JsonResponse(data)  

的index.html

<button 
data-url="{% url 'first:link' pk=first.pk %}" 
data-pk="{{first.pk}}"></button>

foo.js

$('button').click(function() {
var pk = $(this).attr("data-pk"); 
var urla = $(this).attr("data-url"); //
$.ajax({
   url : urla,
   data : {'pk' : pk},
   success : function(data) {
      $('#ID1' + pk).text(data.val1)
      $('#ID2' + pk).text(data.val2)}
   });
});

所以我的错误是:

  

/ link / 5 /中的AttributeError'第一个'对象没有属性'Second'

我知道错误是什么,但我无法弄清楚如何解决它 错误在views.py中。我不能First.Second。所以你能告诉我应该用什么方法吗?

2 个答案:

答案 0 :(得分:1)

添加related_name

first = models.OneToOneField(First, related_name="second")

然后你可以做

obj = models.First.objects.get(pk=pk)
votes = obj.second

答案 1 :(得分:0)

要在django中访问onetoone关系,您可以通过引用它的类的小写名称从父模型类obj访问,除非指定了exclusive related_name,

from django.db.models import F

obj = models.First.objects.get(pk=pk)
votes = obj.votes
votes.value = F('value') + 1
votes.save()

F运算符有助于增加值,因为它反映了db的当前状态。