[英]How Can I query Django Models with Foreign and OneToOneFields for Field Values
[英]How Can I filter Django Models To Get Field Values From Different Tables
我正在開發 Django 票務應用程序,其中我有一個引腳狀態檢查視圖。 我想查詢 Pin Model 以了解該 PIN 是否已激活,如果激活則查詢訪客和 Profile Models 以獲取訪客資料信息並顯示在模板中。
我已經能夠使用 Django Forms 進行搜索以顯示 PIN 詳細信息,但如果 PIN 已激活,則無法找出獲取訪客配置文件的邏輯代碼。 有人可能希望提供幫助。 謝謝。
型號代碼:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null = True)
surname = models.CharField(max_length=20, null=True)
othernames = models.CharField(max_length=40, null=True)
gender = models.CharField(max_length=6, choices=GENDER, blank=True, null=True)
phone = PhoneNumberField()
image = models.ImageField(default='avatar.jpg', blank=False, null=False, upload_to ='profile_images',
)
#Method to save Image
def save(self, *args, **kwargs):
super().save(*args, **kwargs)
img = Image.open(self.image.path)
#Check for Image Height and Width then resize it then save
if img.height > 200 or img.width > 150:
output_size = (150, 250)
img.thumbnail(output_size)
img.save(self.image.path)
def __str__(self):
return f'{self.user.username}-Profile'
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)])
class Guest(models.Model):
guest_name = models.CharField(max_length=30, null=True)
pin = models.CharField(max_length=6, null=True)
def __str__(self):
return f"{self.guest_name}"
我的觀點:
def Pin_Searcht(request):
context = {}
#Search PIN Form
searchForm = SearchEventTicketForm(request.GET or None)
if searchForm.is_valid():
#Value of search form
value = searchForm.cleaned_data['value']
user_pin = Pin.objects.filter(value=value)
else:
user_pin = Pin.objects.order_by('-added')[:2]
page_title = "Search and Print PINs"
context.update ({
'page_title':page_title,
'list_pins':paged_listPin,
'searchForm':searchForm,
'page_title':"PIN Status",
})
return render(request, 'user/pin_list.html', context)
我看不到引腳 Model 和配置文件模型之間有任何關系,我確實在客人中看到了
# This is a Queryset (list of Pins)
# [ <Pin #1> ]
user_pin_list = Pin.objects.filter(value=value)
# Get Guests with Pins (list)
# [ <Guest #1> ]
guest_list Guest.objects.filter(pin__in=user_pin_list)
# Get Pin (Single)
# <Pin #1>
user_pin_or_none = Pin.objects.filter(value=value).first()
# Get Guest with Pin (Single)
# <Guest #1>
guest_or_none = Guest.objects.filter(pin=user_pin).first()
class Pin(models.Model):
value = models.CharField(max_length=6, default=generate_pin, blank=True)
class Profile(models.Model):
# other fields
pin = models.ForeignKey(Pin, on_delete=models.CASCADE)
class Guest(models.Model):
# other fields
pin = models.ForeignKey(Pin, on_delete=models.CASCADE)
user_pin_or_none = Pin.objects.filter(value=value).first()
guest_or_none = Guest.objects.filter(pin=user_pin_or_none).first()
profile_or_none = Profile.objects.filter(pin=user_pin_or_none).first()
# -------------------------
# or you could do this: `__` allows you to filter fields in a ForeignKey (useful!)
guest_or_none = Guest.objects.filter(pin__value=value).first()
profile_or_none = Profile.objects.filter(pin__value=value).first()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.