首页 > 解决方案 > /customer/2/ 'ReverseManyToOneDescriptor' 对象的 Django AttributeError 没有属性 'all'

问题描述

您好我正在尝试解决我试图在我的客户模板中过滤的错误问题。在我看来,如果我放置entry_objects= Entry.objects.all(). 很好,但我希望能够按客户过滤。我的查询集有效,但我不能从下到上进行反向操作。:(

模型.py

    class customer(models.Model):
    name = models.CharField(max_length= 200, null = True)
    phone = models.CharField(max_length= 200, null = True)
    email = models.CharField(max_length= 200, null = True)
    date_created = models.DateTimeField(auto_now_add=True, null= True)

    def __str__(self):
        return self.name
    class UserTopic(models.Model):
    #category for user to chose
    #User interest
    text = models.CharField(max_length=120, null =True) #we want to display characters with max 250
    date_added = models.DateTimeField(auto_now_add=True, null=True ) #allows realtime accuracy upon upload
    #string representation of model
    def __str__(self):
        return self.text
    class Tag(models.Model):
    tag_name = models.CharField(max_length=15, null=True)

    def __str__(self):
        return self.tag_name
    #entry model

class Entry(models.Model):
    cust_name = models.ForeignKey(customer, null= True, on_delete=models.SET_NULL)
    tags = models.ForeignKey(Tag, null = True, on_delete=models.CASCADE)
    topic = models.ForeignKey(UserTopic, null = True, on_delete=models.CASCADE)
    text = models.TextField()
    date_added = models.DateTimeField(auto_now_add=True)
 
    def __str__(self):
        return self.text[:10]+"..."
# ...
on_delete=models.DO_NOTHING,

   

视图.py

def customer_page(request, pk_test):
    customer_objects = customer.objects.get(id=pk_test),
    entry_objects = customer.entry_set.all()

    #entry = Entry.objects.all()
    context = {
        'entry_objects': entry_objects,
        'customer_objects': customer_objects,
    }   
    return render(request, 'user_log/customer.html', context)

标签: pythondjango

解决方案


在外键上放置一个related_name字段,以便其他模型可以使用realated_name字段引用此模型。

class Entry(models.Model):
    cust_name = models.ForeignKey(customer, null= True, on_delete=models.SET_NULL, related_name="entries")

使用您的客户对象(使用 pk 检索)访问他的所有条目

customer_objects = customer.objects.get(id=pk_test),
entry_objects = customer_objects.entries.all()

注意:我相信customer_objects使用pk. customer_object不使用单一名称customer_objects


推荐阅读