所以我有一个问题,我正在考虑创建一个具有其他几个表的外键的单个表,并使用另一个字段"type"来说明该键应该属于哪个表.
class Status(Models.model):
request = models.ForeignKey("Request1", "Request2", "Request3")
request_type = models.IntegerField()
...Some status related data
class Request1(Models.model):
...Some data
class Request2(Models.model):
...Some other data
Class Request3(Models.model):
...different data
Run Code Online (Sandbox Code Playgroud)
我的问题是,是否可以定义这样的外键?我想到的另一个解决方案是像这样定义我的模型
class Status(Models.model):
request1 = models.ForeignKey("Request1")
request2 = models.ForeignKey("Request2")
request3 = models.ForeignKey("Request3")
...Some status related data
class Request1(Models.model):
...Some data
class Request2(Models.model):
...Some other data
Class Request3(Models.model):
...different data
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,是否可以通过django定义约束,该约束表示只允许1个外键拥有数据而另外两个必须为空?或者我是否必须在db端严格设置此约束.(我正在使用postgres)我希望能够告诉django在创建db时这样做,所以我不必记住每次有人重新创建数据库.
任何意见或建议将不胜感激.我没有和这些想法中的任何一个结婚,所以如果有另一种聪明的方法来达到同样的效果,我就能听到它.感谢您的时间.
编辑:我正在使用django 1.7.10
我正在使用NASM编写我的第一个OS引导扇区.我有它的工作,它只显示"Hello OS world!" 用红色字母.很简单.我已将boot.asm转换为boot.bin,并将其转换为boot.img.我正在使用VMWare播放器,我将boot.img作为软盘驱动器安装并从那里启动它工作得很好.但是这个汇编代码有几行是我不明白的目的.
org 07c00h
mov ax, cs
mov ds, ax
mov es, ax
call DispStr
jmp $
DispStr:
mov ax, BootMessage
mov bp, ax
mov cx, 16
mov ax, 01301h ;
mov bx, 000ch ;
mov dl, 0 ;
int 10h ;
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0
dw 0xaa55 ;
Run Code Online (Sandbox Code Playgroud)
以分号结尾的行是我不理解的行.我做了很多谷歌搜索,并能够弄清楚其他的东西.我很擅长写作大会.因此,例如,我知道mov ax,01301h移动01301h到AX寄存器.但我不明白为什么,或者有多01301h重要.我猜他们有点像格式化字符串的参数,但这只是猜测.任何和所有的帮助将不胜感激.
我知道这似乎是一个常见的问题,但我在互联网上四处浏览,并尝试了许多不同的教程和方法来执行此操作。我想我很近,但不确定。我也正在使用Play Framework,但对于Java应该是相同的。这是我的错误
javax.image.IIOException: I/O error reading PNG header!
at com.sun.plugins.png.PNGImageReader.readHeader(Unknown Source)
...
...
Caused by: java.io.EOFException
at javax.imageio.stream.ImageInputStreamImpl.readFully(Unknown Source)
...
Run Code Online (Sandbox Code Playgroud)
这是我的代码,在其中我从表单中获取图片并将图像转换为byte []并存储在MS SQL db中。
@Transactional
public static Result submitTrailer(){
filledForm = newTrailerForm.bindFromRequest();
MultipartFormData body = request().body().asMultipartFormData();
FilePart picture = body.getFile("file");
String fileName = picture.getFilename();
System.out.println(fileName);
String contentType = picture.getContentType();
System.out.println(contentType);
final File file = picture.getFile();
filledForm.get().setContentType(contentType);
try{
BufferedImage originalImage = ImageIO.read(file);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(originalImage, contentType, baos);
filledForm.get().setImage(baos.toByteArray());
baos.flush();
baos.close();
filledForm.get().save();
}catch(IOException e){
e.printStackTrace();
}
return ok(views.html.index.index.render());
} …Run Code Online (Sandbox Code Playgroud) 所以我有一个与其他三个模型具有通用外键关系的模型
class Status(BaseRequestStatus):
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
class Request(models.Model):
name = models.CharField(max_length=50, db_index=True)
...some fields
statuses = GenericRelation(Status, related_query_name='request')
class AnotherRequest(models.Model):
name = models.CharField(max_length=50, db_index=True)
...some fields
statuses = GenericRelation(Status, related_query_name='another_request')
class ThirdRequest(models.Model):
name = models.CharField(max_length=50, db_index=True)
...some fields
statuses = GenericRelation(Status, related_query_name='third_request')
Run Code Online (Sandbox Code Playgroud)
所以目前我正在用表格中的名称显示状态。我希望能够按名称排序。目前我是这样排序的。
Status.objects.all().order_by('request__name', 'another_request__name', 'third_request__name')
Run Code Online (Sandbox Code Playgroud)
然而,使用这种方法,所有“请求”都被排序在一个块中,然后是“another_request”,然后是“third_request”
反正有没有把所有这些排序在一起?我可以通过将其转换为列表来实现。但在这种情况下,我需要使用 Queryset。
在此先感谢您的帮助。
所以我想过滤查询集并获取与单词部分匹配的所有对象
queryset.filter(name=r'regex')
Run Code Online (Sandbox Code Playgroud)
搜索词 = 应用
我对正则表达式真的很糟糕,任何帮助将不胜感激。