13

我的应用程序允许您喜欢一张图片,然后它将您重定向到同一页面

当我尝试喜欢一张图片时出现错误,我可以使用 shell 提示创建类似的对象,但为什么会出现此错误?谢谢你帮助我

AttributeError at /like/3/
function' object has no attribute 'objects'Request Method: GET 
Request URL: http://127.0.0.1:8000/like/3/ 

Exception Value: 'function' object has no attribute 'objects' 
Traceback:
File "C:\Python26\Lib\site-packages\django\core\handlers\base.py" in get_response
111.                         response = callback(request, *callback_args, **callback_kwargs)
File "C:\o\mysite\pet\views.py" in Like
195.     new_like, created = Like.objects.get_or_create(user=request.user, picture_id=picture_id)

这是我的views.py的一部分

def Like(request,picture_id):
    pid = picture_id
    new_like, created = Like.objects.get_or_create(user=request.user, picture_id=picture_id)
    p = Picture.objects.get(pk=pid)
    if created:
        HttpResponseRedirect(reverse('world:url_name'))
    else:
        HttpResponseRedirect(reverse('world:url_name'))

我的网址配置:

     url(

我的模型的一部分:r'^like/(?P\d+)/$', 'pet.views.Like', name = 'Like' ), Myboat.html

 {% if picture %}
 <ul>
    {% for pet in picture %}
    <li><b>description</b> = {{ pet.description}}<br/>
        {% if pet.image %}
 <li>
    <a href ="{% url world:Like pet.id %}">
        <img src= "{{ pet.image.url }}" style="cursor:pointer">
    </a>
 <li>
        {% endif %}
 {% endfor %}
 </ul>
 {% endif %}
 <a href="{% url world:PictureCreator %}">Add Pictures to your board</a><br/>

我的模型.py

class Picture(models.Model):
    user = models.ForeignKey(User)
    board = models.ForeignKey(Board,blank=False,null=False)
    image = models.FileField(upload_to="images/",blank=True)
    description = models.TextField()
    is_primary = models.BooleanField(default=False)
    def __unicode__(self):
        return self.description

class Like(models.Model):
    user = models.ForeignKey(User)
    picture = models.ForeignKey(Picture)
    created = models.DateTimeField(auto_now_add=True)    
4

6 回答 6

25

您的视图函数名称被定义为Like并且您的模型被命名为Like

你定义Like为一个函数,所以当你去访问Like.objectspython 时看不到你的模型Like,而是函数Like

你可以重命名你的视图功能

url(r'^like/(?P\d+)/$', 'pet.views.change_name_no_conflict', name = 'Like' )


def change_name_no_conflict(request,picture_id):
  pass
于 2013-03-16T14:04:00.157 回答
6

模型名称和视图名称不应相同。

于 2016-06-04T03:20:27.363 回答
0

我在做的时候遇到了同样的错误

 from django.contrib.auth import get_user_model
 User = get_user_model

添加()解决了错误:

 from django.contrib.auth import get_user_model
 User = get_user_model()
于 2017-07-04T17:37:13.057 回答
0

函数名和模型名确实取决于名称,函数名应该与url名称相同我们在urls.py中定义的url模型名取决于函数数据成员,其含义例如当我们从用户那里获取数据并保存在数据库中然后我们从其模型名称 ex= u_data = registration() 调用该对象,这用于用户数据 seve 并定义我们发送数据以保存的乐趣意味着目标 url 及其相关视图。

于 2019-09-18T03:38:28.263 回答
0

这是因为你在 view.py 中的函数名和在 models.py 中的模型名是一样的。您可以更改功能名称或型号名称。

另一种解决方案是:

from .models import modelname as modelname2

def modelname(request):
    obj_list_ads = modelname2.objects.all()

在此代码中,函数名称是modelname

于 2021-05-18T19:43:12.163 回答
-1

定义对象:

objects = models.Manager()

你的错误会解决!

于 2020-04-02T22:27:15.980 回答