小编pur*_*tic的帖子

Django ManyToMany模型验证

我有一个与此类似的ManyToManyField模型(模型Word也有一种语言):

class Sentence(models.Model):
    words = models.ManyToManyField(Word)
    language = models.ForeignKey(Language)
    def clean(self):
        for word in self.words.all():
            if word.language_id != self.language_id:
                raise ValidationError('One of the words has a false language')
Run Code Online (Sandbox Code Playgroud)

在尝试添加新句子时(例如通过django admin),我得到了'Sentence' instance needs to have a primary key value before a many-to-many relationship can be used.这意味着在保存之前我无法访问self.words,但这正是我想要做的.有没有办法解决这个问题,所以你可以验证这个模型吗?我真的想直接验证模型的字段.

我发现了很多关于这个例外的问题,但我无法找到解决问题的方法.我很感激任何建议!

django django-models

37
推荐指数
2
解决办法
9516
查看次数

Linux 中有异步版本的 sendfile 吗?

io_getevents乍一看,通知机制看起来非常强大,所以我想要一些可以与它一起使用的东西。我只是还没找到任何东西。在 Windows 上,这很简单:只有TransmitFile,它可以异步工作(重叠),并且如果需要的话可以使用某种通知机制(IOCP、事件)。Linux 上一定有类似的东西,对吗?或者,将我的问题放在某种背景下,我将如何在 Linux 上创建一个高效的文件服务器?

sockets linux asynchronous aio sendfile

4
推荐指数
1
解决办法
2702
查看次数

如何在Django中过滤联接的模型?

我有以下型号:

class Street(models.Model):
    name = models.CharField(max_length=40)

class House(models.Model):
    street = models.ForeignKey(Street, models.PROTECT)
    number = models.CharField(max_length=10)

    class Meta:
        unique_together = ('street', 'number')

class Room(models.Model):
    house = models.ForeignKey(House, models.PROTECT)
    number = models.CharField(max_length=10)

    class Meta:
        unique_together = ('house', 'number')
Run Code Online (Sandbox Code Playgroud)

我已经知道a的ID,Street并希望获取该街道上所有房屋的所有房间。在SQL中,这很简单:

SELECT *
FROM room JOIN house ON house.id = room.house_id
WHERE house.street_id = xyz;
Run Code Online (Sandbox Code Playgroud)

现在如何在Django中执行此操作?我试过了

Room.objects.select_related('house').filter(street=xyz)
Run Code Online (Sandbox Code Playgroud)

但是我收到一个例外,说我无法访问此字段:

django.core.exceptions.FieldError: Cannot resolve keyword 'street' into field. Choices are: house, house_id, id, number
Run Code Online (Sandbox Code Playgroud)

由于我面临的数据量很大,我真的很希望能够使用单个查询进行联接和过滤!当放弃一个或另一个时,我将不得不诉诸于多个查询或在Python中进行过滤,这两种方法本质上都是效率低下的。我猜还有一种替代方法是原始查询。

django join filter django-queryset

2
推荐指数
1
解决办法
3935
查看次数