2016-11-03 3 views
0

Wie kann ich Feld bezogen auf Feld des verwandten Modells machen. Ich habe zwei Modelle: Album und Foto, Album-Modell haben boolean Feld private. Wie man Feld private in Foto anlegt, das False Wert haben wird, wenn Albumfeld gleich None und Wert des privaten Feldes des Albums ist, wenn es nicht ist.Feld bezogen auf Feld des verwandten Objekts Django

models.py:

from django.db import models 
from django.contrib.auth.models import User 
import os 
import uuid 

def get_image_path(instance, filename): 
    return '{}.{}'.format(uuid.uuid4(), filename.split('.')[-1]) 


class Album(models.Model): 
    user = models.ForeignKey(User, related_name='albums', on_delete=models.CASCADE) 
    title = models.CharField(max_length=80, default='New album') 
    creation_date = models.DateField(auto_now_add=True) 
    private = models.BooleanField(default=False) 

    def __str__(self): 
     return self.title 

    class Meta: 
     ordering = ['-creation_date', ] 

class Photo(models.Model): 
    user = models.ForeignKey(User, related_name='photos', on_delete=models.CASCADE) 
    album = models.ForeignKey(Album, related_name='photos', on_delete=models.CASCADE, null=True, blank=True) 
    title = models.CharField(max_length=80, default='New photo') 
    image = models.ImageField(title, upload_to=get_image_path) 
    creation_date = models.DateField(auto_now_add=True) 
    # ??? 
    private = models.BooleanField() 
    # ??? 

    def __str__(self): 
     return self.title 

    class Meta: 
     ordering = ['-creation_date', ] 
+1

Sie können nicht nur eine Eigenschaft hinzufügen, die auf Album privaten Bereich hängt? –

Antwort

0

Wie @RodXavier sagte nur verwenden Eigenschaft

class Photo(models.Model): 
    user = models.ForeignKey(User, related_name='photos', on_delete=models.CASCADE) 
    album = models.ForeignKey(Album, related_name='photos', on_delete=models.CASCADE, null=True, blank=True) 
    title = models.CharField(max_length=80, default='New photo') 
    image = models.ImageField(title, upload_to=get_image_path) 
    creation_date = models.DateField(auto_now_add=True) 

    @property 
    def private(self): 
     return getattr(self, 'album', False) 
+0

, aber ich kann Filter mit diesem Ansatz nicht verwenden. – Rodion

+0

@Robin Ja. Du kannst nicht. Es gibt eine Lösung, die sowohl für die Suche als auch für die Filterung funktioniert, die Sie in Ihrer Frage nicht erwähnt haben. Sie löst die Frage, die Sie gestellt haben –

Verwandte Themen