标签: django-models

Django - 在ImageField上更改文件名

我已经阅读了关于这个主题的其他问题,但实际上没有回答我的问题.

我让用户在向网站提交某个项目时上传图片.每个用户都可以提交多个项目,每个项目都有一个图片.

问题是,我不想用原始文件名保存图片.我想用项目的ID保存它.因此,如果用户提交了一个Banana项目,该项目的ID为5,文件名为

banana.jpg
Run Code Online (Sandbox Code Playgroud)

我希望它保存为

site_media/items/5.jpg
Run Code Online (Sandbox Code Playgroud)

并不是

site_media/items/banana.jpg
Run Code Online (Sandbox Code Playgroud)

这是Django自动执行的操作.

现在的问题是,当我从表单中获取POST多部分数据时,我已将图片保存为site_media/items/item_ID.jpg.但是,当我尝试在模板上显示字段item.picture时,它会尝试访问

 site_media/items/banana.jpg
Run Code Online (Sandbox Code Playgroud)

代替

site_media/items/5.jpg
Run Code Online (Sandbox Code Playgroud)

哪个是实际存在的文件.所以我得到了一个破碎的链接.

我试图更改picture.path属性,希望它只是Django在链接图像时读取的字符串,但Django给了我一个例外,这让我觉得它可能是别的东西.

此外,当然,我更喜欢有一个解决方案,我只是在保存时更改文件名,而不是使用原始文件名删除文件并保存带有新名称的副本,以达到良好的实践和效率目的.

有谁可以帮我这个?谢谢.

型号代码:

class Item(...):
    ...
picture = models.ImageField(
    upload_to="site_media/items/",
    max_length=512,
    null=True,
    default=''
)
Run Code Online (Sandbox Code Playgroud)

这是处理POST表单的函数:

item = Item.objects.create(... data from form)
try:
    picture = FILES['picture']
    print str(picture)

    destination = open('site_media/items/'+str(item.id)+".png", 'wb+')
    for chunk in picture.chunks():
        destination.write(chunk)
    destination.close()

    item.picture = picture
except Exception:
    messages.error(request, "Picture for item not loaded successfully")
Run Code Online (Sandbox Code Playgroud)

django django-models

0
推荐指数
1
解决办法
7342
查看次数

无法使用ModelForm在模板中获取密码输入字段

models.py:

class Users(models.Model):
    username = models.CharField(max_length=255)
    slug = models.CharField(max_length=255, default='0')
    password = models.CharField(max_length=300)
    password_token = models.CharField(max_length=300, default='0')
    email = models.CharField(max_length=255)
    email_verified = models.BooleanField(default=False)
    email_token = models.CharField(max_length=255)
    email_token_expiry = models.DateTimeField()
    tos = models.BooleanField(default=False)
    active = models.BooleanField(default=False)
    last_login = models.DateTimeField(auto_now_add=True)
    last_action = models.DateTimeField(auto_now_add=True)
    is_admin = models.BooleanField(default=False)
    role = models.CharField(max_length=255, default='0')
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return self.username

class UsersModelForm(forms.ModelForm):
    passwordrepeat = forms.PasswordInput()

    class Meta:
        model = Users
        fields = ('username', 'password', 'email')
        widgets = {
            'password' : forms.PasswordInput(),
        } …
Run Code Online (Sandbox Code Playgroud)

python forms django model django-models

0
推荐指数
1
解决办法
522
查看次数

Django过滤AVG - 评级

我怎样才能获得平均评分?

模型:

class Review(models.Model):
    vendor = models.ForeignKey(Vendor)
    product = models.ForeignKey(Product ,blank=True, null=True)
    headline = models.CharField(max_length=100)
    review = models.TextField(blank=True, null=True)
    rating = models.IntegerField()
    active = models.BooleanField(default=1)
    created = models.DateTimeField(auto_now_add=True)
    changed = models.DateTimeField(auto_now=True)
Run Code Online (Sandbox Code Playgroud)

我试试..

rating = Review.objects.filter(vendor = vendor).annotate(Avg('rating'))

模板:

{{rating.rating__avg}}

django django-models

0
推荐指数
1
解决办法
1054
查看次数

外键字段的django管理页面中的list_filter

在django管理页面的list_filter中使用外部字段

假设我有模特

   class Company():
         name varchar(50)
         field1 varchar(50)

   class Client()
          name varchar(50)
          company ForeignKey(Company)
Run Code Online (Sandbox Code Playgroud)

现在我如何在django管理页面中为field1实现客户端模型的过滤器

我尝试了list_filter = ['company_ field1','company _name']但是没有用.有解决方案吗

我正在使用django 1.2版本.

提前致谢

python django django-models django-admin

0
推荐指数
1
解决办法
2393
查看次数

获取名称'COUNTRIES'未在django中定义错误

我是Django的新手.我想在我的表单中添加country字段.我从这里安装了模块django_countries:https://bitbucket.org/smileychris/django-countries

现在我用的时候:

from OpenErp_Django.django_countries import CountryField
class UserForm(forms.Form):
        country = forms.ChoiceField(choices=(('', _('select country')),) + COUNTRIES)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:名称'COUNTRIES'未定义我不知道该怎么做.我被卡住了.有人可以帮忙吗

django django-templates django-models django-forms django-views

0
推荐指数
1
解决办法
158
查看次数

使用Django模型的Django中间件?

是否可以在Middleware中使用常规的Django模型?

我一直在寻找简单的例子,但是找不到任何关于Django框架的这些部分到中间件的可用性.我从他有限的理解中相信它们应该是.

django django-middleware django-models

0
推荐指数
1
解决办法
721
查看次数

在Django中,最好从self获取对象列表并使用相关名称或从对象本身获取并使用过滤器?

标题可能令人困惑,但我不知道如何解释它.这是一个例子.

做这样的事情会更好吗?

class UserType( models.Model ) :
    def user_count( self ) :
        return self.userprofile_set.count()
Run Code Online (Sandbox Code Playgroud)

或者像这样?

class UserType( models.Model ) :
    def user_count( self ) :
        # Does "user_types = self" work? I'm not sure.
        return UserProfile.filter( user_types = self.pk ).count()
Run Code Online (Sandbox Code Playgroud)

哪里

class UserProfile( models.Model ) :
    user_types = models.ManyToManyField( UserType )
Run Code Online (Sandbox Code Playgroud)

UserType.user_count()只返回UserProfile具有特定人物的人数UserType.

对不起,如果这是一个愚蠢,微不足道的问题,但我很好奇.也许一些Django专家可以深入研究实际的SQL性能或东西:-).

python django django-models django-queryset

0
推荐指数
1
解决办法
86
查看次数

SlugField中的连字符

当我在slug中打开带有连字符的URL时出现一个奇怪的错误,尽管SlugField支持连字符,如文档中所示.

所以,这是错误:

Page not found (404)
Request Method: GET
Request URL:    http://127.0.0.1:8003/dumpster-rental-prices
Using the URLconf defined in dumpster.urls, Django tried these URL patterns, in this order:
^admin/
^(?P<slug>\w+)/$
The current URL, dumpster-rental-prices, didn't match any of these.
Run Code Online (Sandbox Code Playgroud)

如果我将文章的slug更改为dumpster_rental_prices - 网址127.0.0.1:8003/dumpster_rental_prices打开正常.

这是博客应用的models.py:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length = 100)
    body = models.TextField(max_length = 5000)
    slug = models.SlugField(max_length = 100)

    def __unicode__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

这是博客中的urls.py:

from django.conf.urls import patterns, include, url
from django.views.generic import DetailView, ListView
from blog.models …
Run Code Online (Sandbox Code Playgroud)

django django-models hyphen slug django-views

0
推荐指数
1
解决办法
1114
查看次数

如何在Django中创建一个WHERE/something_else查询?

我已经快速浏览了以下文档,看看如何WHERE ... OR在Django中进行查询.但我找不到它,也许我太累了.所以我在这里问它.

django django-models django-queryset

0
推荐指数
1
解决办法
43
查看次数

如何在django中修复valuerror?

给定模型时,我无法返回列表.我的模型:

class Club(models.Model):
    establishment = models.CharField(max_length=200)
    address = models.CharField(max_length=200)
    def __unicode__(self):
        return self.establishment

class Available(models.Model):
    club = models.ForeignKey(Club)
    court = models.CharField(max_length=200)
    avail_time = models.DateTimeField('available time')
    def __unicode__(self):
        return self.court
Run Code Online (Sandbox Code Playgroud)

我正在尝试运行"Available.objects.filter(club ="AV Club"),但我得到了"ValueError:无效的文字用于int(),基数为10:'AV Club'".我的最终目标是能够返回给俱乐部的avail_times列表.

有关如何修复的任何想法?这可能是一个超级基本的问题,但我是django的新手并且一直在为此而奋斗.谢谢!

python django django-models

0
推荐指数
1
解决办法
91
查看次数