Как я могу получить значение CharField () во время инстанциации? - PullRequest
0 голосов
/ 28 октября 2019

Я хочу передать значения полей модели в качестве аргументов в другое поле.

trademark_class.get_default() метод близок к тому, что я хочу, но я не хочу только значение по умолчанию.

IЯ также не могу использовать __dict__.['trademark_class'] в этом случае, так как мне нужна ссылка «this» на класс, и я не знаю, как правильно добиться этого для этого случая.

class Form_33_Model(models.Model):
    trademark_number = models.CharField(default='default number', max_length=30)
    trademark_class = models.CharField(default='default class', max_length=30)
    trademark_date = models.DateField(default=datetime.date.today)
    html = models.TextField(default=Form33StringClass(trademark_class=trademark_class.get_default(),
                                                    trademark_number=trademark_number.get_default()).form_33_string)

Вместо значения по умолчаниютолько, я хотел бы получить либо фактическое значение поля Чарфилда, либо его значение по умолчанию.

Итак, что-то вроде: trademark_class.get_current_value_or_default() будет идеальным для того, что я хочу.

Ниже приведен мой Form33StringClass.py



import datetime


class Form33StringClass():
    def __init__(self, trademark_number, trademark_class):
        self.trademark_number = trademark_number
        self.trademark_class = trademark_class
        self.day = datetime.datetime.now().strftime("%A") + " " + datetime.datetime.now().strftime("%d")
        self.month = datetime.datetime.now().strftime("%B")
        self.year = datetime.datetime.now().strftime("%Y")
        self.form_33_string = """
<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title>Trade Marks Act</title>
        <style>
            .letter_margin {
                margin: auto 25%;
                line-height: 25px;
            }
            header{
                text-align: center;
            }
            .intro {
                text-align: center;
                font-style: italic;
            }
            .request{

            }
            .office_address{
                width: 50%;
                margin-left: 10%;
            }
            .address_row{
                display: flex;
                align-items: baseline;
            }

            .re-address_row{
                /* float: right; */
                display: flex;
                justify-content: flex-end;
            }
            .re_address{
                width: 60%;

            }
            .to_registrar{
                display: flex;
                align-items: baseline;
            }

            .registrar_paragraph {
                margin-left: 10%;
            }

            .underlined{
                text-decoration: underline;
            }
            .trademark_class{

            }
            .trademark_number{

            }
        </style>
    </head>
    <body>
        <table>
            <tr>
                <header>
                    <h1>TRADE MARKS ACT</h1>
                    <h2>FORM 33</h2>
                </header>
            </tr>
            <tr >
                <div class="intro letter_margin">
                    <p>
                        Form of Request to the Registrar by a Registered Proprietor or a Registered User of a Trade Mark, or a person  about  to be so registered, to enter, alter, or substitute an Address  for  service  as  part  of  his  Registration (Regulations 15, 82. 86 and 102)
                    </p>
                </div>
            </tr>
            <tr>
                <div class="request letter_margin">
                    <p >

                        Request is made by: <br><br>


                        A company incorporated in <br>

                        Carrying on business as manufacturers and merchants at:<br><br><br>


                        who is about to be registered as/who is the Registered Proprietor of Trade Mark(s)<br> No <span class="underlined trademark_number"> """+ trademark_number +"""</span> registered in Class(es) <span class="underlined trademark_class"> """+trademark_class+"""</span> <br>

                        for the inclusion/addition/alteration/substitution of an address for service in Nigeria in or to <br> the entry thereof so that the address for service in Nigeria may read:
                    </p>
                </div>
            </tr>

            ....

    </body>
</html>


"""


при создании нового Form_33_Model.objects.create (trademark_class, trademark_number):

{
  trademark_class : "class foo",
  trademark_number : "number bar",
  html : "<html>...
    <tag> class foo </tag> 
    <tag> number bar </tag>
...
</html>"
}

Ответы [ 2 ]

0 голосов
/ 03 ноября 2019

В конце концов я решил свою проблему, переопределив метод save() в модели.

class Form_33_Model(models.Model):
    trademark_number = models.CharField(default='default number', max_length=30)
    trademark_class = models.CharField(default='default class', max_length=30)
    trademark_date = models.DateField(default=datetime.date.today)
    html = models.TextField(default=Form33StringClass(
            trademark_class=trademark_class.get_default(),
            trademark_number=trademark_number.get_default()
            ).form_33_string)

    def save(self, *args, **kwargs):
        self.html = Form33StringClass(
                    trademark_class=self.trademark_class,
                    trademark_number=self.trademark_number
                    ).form_33_string
        super(Form_33_Model, self).save(*args, **kwargs)
0 голосов
/ 28 октября 2019

Я до сих пор не могу понять, что вы пытаетесь сделать. Но, возможно, SerializerMethodField - это то, что вы хотите?

class Form33ModelSerializer(serializers.ModelSerializer):
    html = SerializerMethodField()

    class Meta:
        model = Form_33_Model

    def get_html(self, obj):
        return obj.html or obj._meta.get_field('trademark_class').get_default()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...