如何获取具有指向对象的ForeignKey的所有模型对象的列表?(类似于DELETE CASCADE之前Django管理员中的删除确认页面).
我试图想出一种在数据库中合并重复对象的通用方法.基本上我希望所有具有ForeignKeys指向对象"B"的对象被更新为指向对象"A",这样我就可以删除"B"而不会丢失任何重要的东西.
谢谢你的帮助!
我使用1.2.5标准ImageField并使用内置存储后端.文件上传很好但是当我从管理员删除条目时,服务器上的实际文件不会删除.
请原谅我丑陋的英语;-)
想象一下这个非常简单的模型:
class Photo(models.Model):
image = models.ImageField('Label', upload_to='path/')
Run Code Online (Sandbox Code Playgroud)
我想从图像URL创建一个照片(即,不是在django管理站点中手动创建).
我想我需要做这样的事情:
from myapp.models import Photo
import urllib
img_url = 'http://www.site.com/image.jpg'
img = urllib.urlopen(img_url)
# Here I need to retrieve the image (as the same way that if I put it in an input from admin site)
photo = Photo.objects.create(image=image)
Run Code Online (Sandbox Code Playgroud)
如果不告诉我,我希望我已经很好地解释了这个问题.
谢谢 :)
编辑:
这可能有效,但我不知道如何转换content为django文件:
from urlparse import urlparse
import urllib2
from django.core.files import File
photo = Photo()
img_url = 'http://i.ytimg.com/vi/GPpN5YUNDeI/default.jpg'
name = urlparse(img_url).path.split('/')[-1]
content = urllib2.urlopen(img_url).read()
# problem: content …Run Code Online (Sandbox Code Playgroud) 我在缠绕这个问题时遇到了麻烦.现在我有一些看起来像这样的模型:
def Review(models.Model)
...fields...
overall_score = models.FloatField(blank=True)
def Score(models.Model)
review = models.ForeignKey(Review)
question = models.TextField()
grade = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
评论有几个"分数",整体分数是分数的平均值.保存评论或分数时,我需要重新计算total_score平均值.现在我正在使用重写的保存方法.使用Django的信号调度程序会有什么好处吗?
出于多种原因^,我想在我的一些Django模型中使用UUID作为主键.如果我这样做,我是否仍然可以使用"contrib.com","django-voting"或"django-tagging"之类的外部应用程序,它们通过ContentType使用通用关系?
以"django-voting"为例,投票模型如下所示:
class Vote(models.Model):
user = models.ForeignKey(User)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
object = generic.GenericForeignKey('content_type', 'object_id')
vote = models.SmallIntegerField(choices=SCORES)
Run Code Online (Sandbox Code Playgroud)
这个应用程序似乎假设被投票的模型的主键是一个整数.
内置的评论应用程序似乎能够处理非整数PK,但是:
class BaseCommentAbstractModel(models.Model):
content_type = models.ForeignKey(ContentType,
verbose_name=_('content type'),
related_name="content_type_set_for_%(class)s")
object_pk = models.TextField(_('object ID'))
content_object = generic.GenericForeignKey(ct_field="content_type", fk_field="object_pk")
Run Code Online (Sandbox Code Playgroud)
对于第三方应用程序而言,这种"整数假定PK"问题是否会成为一种常见情况,这会使使用UUID变得痛苦?或者,我可能会误读这种情况吗?
有没有办法在Django中使用UUID作为主键而不会造成太多麻烦?
我很好奇是否有任何方法可以在Django中进行查询而不是SELECT * FROM..."下面的".我正在尝试做一个" SELECT DISTINCT columnName FROM ...".
具体来说,我有一个模型,看起来像:
class ProductOrder(models.Model):
Product = models.CharField(max_length=20, promary_key=True)
Category = models.CharField(max_length=30)
Rank = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)
其中Rank是一个排名Category.我希望能够遍历所有类别,对该类别中的每个等级进行一些操作.
我想首先获得系统中所有类别的列表,然后查询该类别中的所有产品并重复,直到处理完每个类别.
我宁愿避免使用原始SQL,但如果我必须去那里,那就没事了.虽然我以前从来没有在Django/Python中编写原始SQL.
在django中 - 是否有所有对象的默认时间戳字段?也就是说,我是否必须在我的模型中为'created on'显式声明'timestamp'字段 - 或者有没有办法自动获得它?
我有两个这样的模型:
class Type1Profile(models.Model):
user = models.OneToOneField(User, unique=True)
...
class Type2Profile(models.Model):
user = models.OneToOneField(User, unique=True)
...
Run Code Online (Sandbox Code Playgroud)
如果用户具有Type1或Type2配置文件,我需要做一些事情:
if request.user.type1profile != None:
# do something
elif request.user.type2profile != None:
# do something else
else:
# do something else
Run Code Online (Sandbox Code Playgroud)
但是,对于没有type1或type2配置文件的用户,执行这样的代码会产生以下错误:
Type1Profile matching query does not exist.
Run Code Online (Sandbox Code Playgroud)
如何查看用户的个人资料类型?
谢谢
我有一个模型,我想包含一个主题名称和他们的首字母.(这些数据有些匿名,并通过首字母进行跟踪.)
现在,我写道
class Subject(models.Model):
name = models.CharField("Name", max_length=30)
def subject_initials(self):
return ''.join(map(lambda x: '' if len(x)==0 else x[0],
self.name.split(' ')))
# Next line is what I want to do (or something equivalent), but doesn't work with
# NameError: name 'self' is not defined
subject_init = models.CharField("Subject Initials", max_length=5, default=self.subject_initials)
Run Code Online (Sandbox Code Playgroud)
如最后一行所示,我希望能够将首字母实际存储在数据库中作为字段(独立于名称),但是使用基于名称字段的默认值进行初始化.但是,我有问题,因为django模型似乎没有"自我".
如果我将行更改为subject_init = models.CharField("Subject initials", max_length=2, default=subject_initials),我可以执行syncdb,但无法创建新主题.
这在django中是否可行,具有可调用函数根据另一个字段的值给出某个字段的默认值?
(好奇的是,我想分开我的商店首字母的原因是极少数情况下奇怪的姓氏可能与我跟踪的名字不同.例如,有人认为主题1命名为"John O'Mallory"的首字母是"JM"而不是"JO",并希望修改为管理员.)
我遇到了一个有趣的情况.
class Company(models.Model):
date = models.DateField()
time = models.TimeField()
Run Code Online (Sandbox Code Playgroud)
使用此课程时:
c = Company(date=datetime.datetime.now(), time=datetime.datetime.now())
Run Code Online (Sandbox Code Playgroud)
Django决定DATETIME_INPUT_FORMATS在formats.py文件中使用defined.这是有道理的,因为我将datetime.now()传递给两个字段.
我想我能让Django的使用datetime.now()和DATE_INPUT_FORMATS分别,如果我只在当前日期和当前时间过去了.
像这样的东西:
c = Company(date=datetime.date.now(), time=datetime.time.now())
Run Code Online (Sandbox Code Playgroud)
但这引发了一个异常,因为现在不存在这样的异常.有没有不同的方法来实现这一目标?
非常感谢,
django-models ×10
django ×9
python ×6
content-type ×1
distinct ×1
django-1.2 ×1
django-orm ×1
django-views ×1
file ×1
imagefield ×1
merge ×1
one-to-one ×1
primary-key ×1
storage ×1
urllib ×1
uuid ×1