如何使用列表搜索Django多个表



我想在Django中使用Foreignkey相关的表单搜索三个模型。我还想显示这个搜索结果的列表以及它们各自的详细信息。想法是,我有以下django模型;活动、门票和徽章。我想使用事件名称进行搜索,但我无法弄清楚我的代码到底有什么问题。我有一个错误,上面写着字段"id"需要一个数字,但得到了"出生日",下面是我尝试的,

型号:

class Event(models.Model):
event_name = models.CharField(max_length=100)
date = models.DateField(auto_now_add=False, auto_now=False, null=False)
event_venue = models.CharField(max_length=200)
event_logo = models.ImageField(default='avatar.jpg', blank=False, null=False, upload_to ='profile_images')
added_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.event_name}"
#Prepare the url path for the Model
def get_absolute_url(self):
return reverse("event_detail", args=[str(self.id)])
class Ticket(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
price = models.PositiveIntegerField()
category = models.CharField(max_length=100, choices=PASS, default=None, blank=True, null=True)
added_date = models.DateField(auto_now_add=True)
def __str__(self):
return f"{self.event} "
#Prepare the url path for the Model
def get_absolute_url(self):
return reverse("ticket-detail", args=[str(self.id)])
def generate_pin():
return ''.join(str(randint(0, 9)) for _ in range(6))
class Pin(models.Model):
ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
value = models.CharField(max_length=6, default=generate_pin, blank=True)
added = models.DateTimeField(auto_now_add=True,  blank=False)
reference = models.UUIDField(primary_key = True, editable = False, default=uuid.uuid4)
status = models.CharField(max_length=30, default='Not Activated')
#Save Reference Number
def save(self, *args, **kwargs):
self.reference == str(uuid.uuid4())
super().save(*args, **kwargs) 
def __unicode__(self):
return self.ticket
class Meta:
unique_together = ["ticket", "value"]
def __str__(self):
return f"{self.ticket}"
def get_absolute_url(self):
return reverse("pin-detail", args=[str(self.id)])

我的视图代码

def Pin_Search_List(request):
context = {}
#Search PIN Form
searchForm = SearchEventTicketForm(request.GET or None)

if searchForm.is_valid():
#Value of search form
value = searchForm.cleaned_data['value']
#Filter PIN by Events using Q Objects
#event_filter = Q(ticket__event_icontains = value) 
#Apply the Profile Object Filter
list_pins = Pin.objects.filter(ticket__event=value) 

else:
list_pins = Pin.objects.all()
page_title = "Search and Print PINs"
context.update ({
'page_title':page_title,
'list_pins':list_pins,
'searchForm':searchForm,
})
return render(request, 'user/pin_list.html', context)

请理解forms.py中的searchForm没有发布。

执行

Pin.objects.filter(ticket__event__event_name__icontains=value)

最新更新