簡體   English   中英

Django,queryset過濾ManyToManyField

[英]Django, queryset filter ManyToManyField

我確實有以下兩種型號。 所以我試圖獲得特定課程的所有模塊。 正如你所看到的,我已經得到了那個特定的課程。 所以我只需要從中獲取模塊 我閱讀有關過濾ManyToManyField 的文檔 ,但仍然無法使其工作。 我知道也許這太簡單但無法解決。

models.py

class Course(models.Model):
    name = models.CharField(max_length=100)
    modules = models.ManyToManyField('Module', blank=True)

class Module(models.Model):
    code = models.CharField(max_length=10, unique=True)
    name = models.CharField(max_length=65)
    year = models.IntegerField()

view.py

def ajax_get_modules(request, course):
    current_course = Course.objects.get(pk=course).pk
    modules = Module.objects.filter(...........)
    if request.is_ajax():
        data = serializers.serialize('json', modules)
        return HttpResponse(data, content_type="application/javascript")

嘗試:

current_course = Course.objects.get(pk=course)
modules = Module.objects.all().filter(course=current_course)
#models.py
class Telephone(models.Model):
    status                = models.IntegerField(default=0)
    number                = models.CharField(max_length=255, blank=True)

class Profile(models.Model):
    first_name            = models.CharField(max_length=255, blank=True)
    last_name             = models.CharField(max_length=255, blank=True)
    telephone             = models.ManyToManyField(Telephone, blank=True, null=True)

#views.py
def api(request):
    profile = Profile.objects.get(pk=1) #just as an example
    primary_telephone     = profile.telephone.all().filter(status=1)

#I was looking for the primary telephone of my client, this was the way I have solved.

您在課程模型上有一個相關字段,它是M2M到模塊,因此您可以訪問與課程直接關聯的模塊列表。

完成課程后,只需獲取所有模塊,如下所示:

course = Course.objects.get(pk=course_id)
course_modules = course.modules.all()

我總是建議用try / except來包裝查詢Course的第一行 - 這是因為如果找不到結果,模型管理器的get方法會拋出異常。

這可以這樣做:

try:
    course = Course.objects.get(pk=course_id)
except Course.DoesNotExist:
    pass  # Handle this exception

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM