我有一个看起来像这样的 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)
那么我该怎么做呢?
我在一个网络漫画平台上工作,我需要允许用户在一个帖子中上传多张图片。
理想情况下 - 保持尽可能简单,这样人们就不必刷新页面来上传每张图片,或者在添加图片之前创建和保存帖子。
如果用户可以删除或重新排序图像,那就太好了。
此外,我需要使其具有可扩展性,以便以后不会遇到问题。
你能给我建议如何正确地做到这一点吗?
图像是否应该有自己的模型,并使用外键连接到帖子?(不确定这是否有意义,看起来有点丑)
或者我应该在帖子模型的某种类型的字段中保留一个图像网址列表,然后创建某种cdn并将其上传到那里?
任何建议都非常感谢。
我尝试从 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) 我想在每个产品下显示计算的折扣。下面的代码没有错误,但不显示值。
模型.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: …
我正在尝试使用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 …
我有“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) 我想在 24 小时后删除一个实例,因为该实例已创建如何使用 celery
创建实例后如何启动“TIMER”?
我想要像 Snapchat 这样的东西
我想获取传递给函数中的序列化程序的id值
id = serializers.IntegerField(label='ID')以获取配置文件对象
def profile_info(self, obj)
但它给出的错误id是
IntegerField请传递 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) 在我使用 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-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 上有人为我提供解决方案。
提前致谢
django ×10
django-models ×10
python ×5
django-forms ×2
django-orm ×2
celery ×1
database ×1
json ×1
ldap ×1
orm ×1