标签: django-models

如何将 Django DateTimeField 默认为 utcnow() + 1 天?

我有一个看起来像这样的 Django 对象:

from datetime import timedelta

class MyObject:
    startTime = models.DateTimeField(default=datetime.datetime.utcnow)
Run Code Online (Sandbox Code Playgroud)

现在我想向这个模型添加一个名为 expiredTime 的字段,它会在 startTime 之后自动设置为 1 天。显然这行不通:

    expiredTS = models.DateTimeField(default=datetime.datetime.utcnow + timedelta(days=1))
Run Code Online (Sandbox Code Playgroud)

那么我该怎么做呢?

python django django-models

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

将多个图像附加到帖子的正确方法是什么?[姜戈]

我在一个网络漫画平台上工作,我需要允许用户在一个帖子中上传多张图片。

  • 理想情况下 - 保持尽可能简单,这样人们就不必刷新页面来上传每张图片,或者在添加图片之前创建和保存帖子。

  • 如果用户可以删除或重新排序图像,那就太好了。

  • 此外,我需要使其具有可扩展性,以便以后不会遇到问题。

你能给我建议如何正确地做到这一点吗?

图像是否应该有自己的模型,并使用外键连接到帖子?(不确定这是否有意义,看起来有点丑)

或者我应该在帖子模型的某种类型的字段中保留一个图像网址列表,然后创建某种cdn并将其上传到那里?

任何建议都非常感谢。

python django django-models django-forms

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

PIL 到 Django ImageField

我尝试从 url 创建图像并将其保存在我的 django 模型中。如果第一部分工作正常,我不知道如何将生成的文件关联到我的对象。

这是我生成图像文件的功能:

def get_remote_image(image_url, merchant_product_path):
    im = None
    name = ''
    r = requests.get(image_url, stream=True)
    if r.status_code == 200:
        name = urlparse(image_url).path.split('/')[-1]

        full_path = os.path.join(settings.MEDIA_ROOT, merchant_product_path)
        if not os.path.exists(full_path):
            os.makedirs(full_path)

        im = Image.open(r.raw)
        if im.mode != "RGB":
            im = im.convert("RGB")
        im.thumbnail((500, 500), Image.ANTIALIAS)
        im.save(full_path + name, 'JPEG')

    return {'im': im, 'name': name}
Run Code Online (Sandbox Code Playgroud)

现在,将此文件关联到我的对象的部分:

    i = get_remote_image(row['pict'], m.get_products_media_path())

    obj, created = ProductLine.objects.update_or_create(
    ...
    ...
    ...
    )

if i['im'] is not None:
    try:
        obj.main_picture.save(
            i['name'],
            ContentFile(i['im']),
            save=True)
    except …
Run Code Online (Sandbox Code Playgroud)

python django django-models python-imaging-library

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

在 Django 的模板中显示模型的计算值

我想在每个产品下显示计算的折扣。下面的代码没有错误,但不显示值。

模型.py

from django.db import models
# Create your models here.
CATEGORIES = (  
    ('Electronics', 'Electronics'),
    ('Clothing', 'Clothing'),
)

class Products(models.Model):
    Image = models.FileField()
    ProductName = models.CharField(max_length = 250, default='')
    Brand = models.CharField(max_length = 250, default='')
    OriginalPrice = models.IntegerField(default = '')
    Price = models.IntegerField(default = '')
    Category = models.CharField(max_length = 250, choices = CATEGORIES)

    class Meta:
        verbose_name = 'Product'
        verbose_name_plural = 'Products'

    def DiscountCalc(self):
        Discount = (Price/OriginalPrice) * 100
        return self.Discount

    def __str__ (self):
        return self.ProductName
Run Code Online (Sandbox Code Playgroud)

这是模板 index.html: …

django django-templates django-models

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

当我使用过滤器检查相同的参数时,get_or_create 返回错误,即存在多个对象值,它返回 0 个对象

我正在尝试使用get_or_create方法来查看记录是否存在。如果记录存在,则什么都不做,否则创建它。

这个模型基本上用在失败的命令上

 class modelStudentExamsPerformed(models.Model):
        patient = models.ForeignKey(modelPatient)
        student = models.ForeignKey(modelStudent,on_delete=models.CASCADE)
        normalBodyPart = models.ForeignKey(modelNormalBodyPartResult,default=None,blank=True,null=True)
        abnormalBodyPart = models.ForeignKey(modelAbnormalBodyPartResult,default=None,blank=True,null=True)
        tool = models.CharField(max_length=128, default="")
Run Code Online (Sandbox Code Playgroud)

现在这是使用上述模型但失败的命令

exams.modelStudentExamsPerformed.objects.get_or_create()(patient=patient_qset, student=stud_qset,abnormalBodyPart=qset[0],normalBodyPart=None,date=None)
Run Code Online (Sandbox Code Playgroud)

上面的语句给了我错误:

get() returned more than one modelStudentExamsPerformed -- it returned 2!
Run Code Online (Sandbox Code Playgroud)

现在这是我遇到麻烦的地方。当我通过我的管理员查看数据库时,我确实注意到两个对象,但这些对象都有一个关联的值normalBodyPart并且它们abnormalBodyPart是空的。既然我明确指定并分配了一个值,abnormalBodyPart为什么 django 说两个项目已经存在?我希望这是有道理的 。

让我们以另一种方式解释这一点,假设有两个语句 1 和 2。语句 1 根据指定的参数获取或创建记录。这个 get 或 create 失败,因为 django 认为已经有两条记录。但是语句 2 使用相同的确切参数并返回 0 条记录。这是为什么 ?我在这里缺少什么和不理解?

声明 1:

exams.modelStudentExamsPerformed.objects.get_or_create()(patient=patient_qset, student=stud_qset,abnormalBodyPart=qset[0],normalBodyPart=None,date=None)
Run Code Online (Sandbox Code Playgroud)

当显然该表中的所有对象都没有 的值时abnormalBodyPart。我通过执行以下操作验证了这一点

声明 2:

k = exams.modelStudentExamsPerformed.objects.filter(patient=patient_qset, student=stud_qset,abnormalBodyPart=qset[0], normalBodyPart=None,date=None)
Run Code Online (Sandbox Code Playgroud)

上面的语句 2 …

django orm django-models django-orm

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

Django:用过滤器注释计数

我有“post”对象和一个“post like”对象,其中包含哪个用户收到了多少赞:

class Post(models.Model):
    text     = models.CharField(max_length=500, default ='')
    user     = models.ForeignKey(User)

class PostLike(models.Model):
    user    = models.ForeignKey(User)
    post    = models.ForeignKey(Post)
Run Code Online (Sandbox Code Playgroud)

我可以像这样选择帖子收到的赞数:

Post.objects.all().annotate(likes=Count('postlike'))
Run Code Online (Sandbox Code Playgroud)

这大致翻译为:

SELECT p.*,
       Count(l.id) AS likes
    FROM post p, postlike l
    WHERE p.id = l.post_id
    GROUP BY (p.id)
Run Code Online (Sandbox Code Playgroud)

有用。现在,我如何过滤Count当前用户的聚合?我想不检索所有岗位的喜欢,但都喜欢通过登录的用户。生成的 SQL 应该是这样的:

SELECT p.*,
    (SELECT COUNT(*) FROM postlike WHERE postlike.user_id = 1 AND postlike.post_id = p.id) AS likes
FROM post p, postlike l
WHERE p.id = l.post_id
GROUP BY (p.id)
Run Code Online (Sandbox Code Playgroud)

python django django-models django-orm

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

如何在创建相同对象 24 小时后删除对象

我想在 24 小时后删除一个实例,因为该实例已创建如何使用 celery

创建实例后如何启动“TIMER”?

我想要像 Snapchat 这样的东西

database django django-models celery

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

如何在序列化程序中获取字段值

我想获取传递给函数中的序列化程序的id
id = serializers.IntegerField(label='ID')以获取配置文件对象

def profile_info(self, obj)

但它给出的错误idIntegerField请传递 int 或 string

任何人都可以告诉我如何获取在id字段中传递的值,谢谢。下面是我的序列化程序代码

class UserSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(label='ID')
    # print ('dadddaaa ',serializers.data)
    profile = serializers.SerializerMethodField('profile_info')
    username = serializers.CharField()
    first_name = serializers.CharField()
    last_name = serializers.CharField()
    # Nazir = serializers.CharField()
    # profile = UsersSerializer(Profile.objects.get(User.objects.get(pk=serializers.data['id'])))
    def profile_info(self, obj): 
        # print ('selffff   ', serializers)
        prof_obj = Profile.objects.get(user=User.objects.get(pk=id))
        return {'id':prof_obj.id}
Run Code Online (Sandbox Code Playgroud)

django serialization django-models django-serializer

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

在 Django 数据库中存储 JSON 变量

在我使用 Gridster 的应用程序中,我正在更改小部件位置,然后将其保存为 json 变量。我想将此 json 变量存储在 django 数据库中。为此,我不明白我应该如何在 views.py 中定义一个函数,在 models.py 中定义一个可以存储 json 变量的类

我的 HTML/JS 模板是

var URL = "{% url 'my_view_url' %}";

   $('.js-seralize-update').on('click', function () {

            var s = gridster.serialize();
            updated_grid=JSON.stringify(s);
            $('#log').val(updated_grid);

            function updategridster(){
            var data = updated_grid;
            $.post(URL, data, function(response){
            if(response === 'success'){ alert('Yay!'); }
            else{ alert('Error! :('); }
    });
}

        });
Run Code Online (Sandbox Code Playgroud)

我的意见.py

def save_grid(request):
    if request.method == 'POST':

            # Some code to get json variable and store it to model
            return HttpResponse('success') # if everything …
Run Code Online (Sandbox Code Playgroud)

django json django-models django-rest-framework

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

类型错误:“类元”的属性无效:字段,模型

我正在尝试使用 django-ldapdb 库来显示用户的 LDAP 属性。首先我做了一个新模型:

模型.py

class LdapUser(ldapdb.models.Model):
    base_dn = u"CN=XXX,CN=Users,DC=domain,DC=com"
    object_classes = ['posixAccount', 'shadowAccount', 'inetOrgPerson']

    # inetOrgPerson
    phone = CharField(db_column='telephoneNumber', blank=True)
    mobile_phone = CharField(db_column='mobile', blank=True)
Run Code Online (Sandbox Code Playgroud)

我想用表单在我的 webapp 中显示这些。

class LdapUserForm(ldapdb.models.Model):
    class Meta:
       model = LdapUser
       fields = (
       'phone',
       'mobile_phone'
       )
Run Code Online (Sandbox Code Playgroud)

我做了所有的迁移,但是当我运行我的代码时,它给了我以下错误。

raise TypeError("'class Meta' 的属性无效:%s" % ','.join(meta_attrs.keys())) TypeError:'class Meta' 的属性无效:字段,模型

我查了一下,但找不到任何有用的东西。所以我希望 stacko 上有人为我提供解决方案。

提前致谢

python django ldap django-models django-forms

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